linux 下同名符号冲突问题解决方案

最近的工作中遇到如下的问题:
Linux 下有三个模块aa、bb、cc,基本情况如下:
cc 编译连接得到 cc.so 动态库,cc 中有如下接口:
cc_fun
{
……
do();//调用名为do的cc模块内部函数
……
}
bb 编译连接得到 bb.a 静态库,bb 中有如下接口:
bb_fun
{
……
handle = dlopen(cc.so, RTLD_LAZY);//加载cc.so
pccfun = dlsym(handle, “cc_fun”);//获取cc_fun函数指针
(*pccfun)();//调用cc_fun函数,此时应该会调用cc模块中的do()函数
do();//调用名为do的bb模块内部函数(与cc模块中的do()函数同名,实现却不相同)
……
}
aa 编译后通过 -lbb 链接选项的方式连接 bb.a 得到 aa 可执行程序,并调用 bb.a 的接口函数 bb_fun():
main
{
……
bb_fun();//调用bb_fun函数
……
}
工作中发现 aa 在运行时行为异常,总是有内存泄露和功能异常,通过定位发现问题集中在同名的 do() 函数上。通过输出打印发现程序中两次调用 do() 函数都调用到了 bb 模块中的 do() 函数,而 cc 模块中的 do() 函数从未被调用到,导致程序行为异常和内存泄露。
后经多方查证了解到因为 linux 程序中各个库中的符号表最终都会加载到程序所在的全局符号表中,此时如果有同名符号就只能调用到第一个加载进来的符号,也就是说后边加载的同名符号都会被之前的覆盖。cc 模块中的 do() 函数被 bb 模块中的 do() 函数覆盖了,所以无法被调用到。
废话不多说。。。
在试验过很多不满意的方法之后,最终的解决方法如下:
1.在 cc 的 makefile 中加入 -Wl,-Bsymbolic -Wl,--version-script,version 的连接选项,意思是用 version 文件中的脚本指定其导出哪些函数。
2.version 文件的实现如下:
VERS{
global:
cc_fun;
local: *;
};
意思是指定 cc 模块只导出接口函数 cc_fun,其余函数都设为 local 不做导出。
将该文件保存在 makefile 所在目录即可。
3.重新编译连接三个模块,问题解决。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# linux 下同名符号冲突问题解决
# linux 同名符号冲突
# 加载
# 中有
# 是有
# 设为
# 两次
# 希望能
# 不做
# 不满意
# 谢谢大家
# 多说
# 时应
# 将该
# 到第
# 可执行
# 未被
# 后经
# 方法如下
# 库中
# 也就是说
# cc_fun
相关文章:
MySQL查询结果复制到新表的方法(更新、插入)
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
制作网页的网站有哪些,电脑上怎么做网页?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
网站微信制作软件,如何制作微信链接?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
Python lxml的etree和ElementTree有什么区别
如何挑选最适合建站的高性能VPS主机?
如何在阿里云高效完成企业建站全流程?
电商网站制作公司有哪些,1688网是什么意思?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
建站主机默认首页配置指南:核心功能与访问路径优化
海南网站制作公司有哪些,海口网是哪家的?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
再谈Python中的字符串与字符编码(推荐)
如何在IIS7上新建站点并设置安全权限?
已有域名能否直接搭建网站?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
如何通过网站建站时间优化SEO与用户体验?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
深圳网站制作的公司有哪些,dido官方网站?
如何做静态网页,sublimetext3.0制作静态网页?
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
做企业网站制作流程,企业网站制作基本流程有哪些?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
建站org新手必看:2024最新搭建流程与模板选择技巧
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
建站之星安装步骤有哪些常见问题?
行程制作网站有哪些,第三方机票电子行程单怎么开?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
如何快速搭建高效可靠的建站解决方案?
建站之星伪静态规则如何设置?
如何零成本快速生成个人自助网站?
如何构建满足综合性能需求的优质建站方案?
子杰智能建站系统|零代码开发与AI生成SEO优化指南
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
如何在IIS中配置站点IP、端口及主机头?
如何快速搭建高效WAP手机网站吸引移动用户?
小型网站制作HTML,*游戏网站怎么搭建?
大连网站设计制作招聘信息,大连投诉网站有哪些?
如何快速上传建站程序避免常见错误?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
如何零基础在云服务器搭建WordPress站点?
*请认真填写需求信息,我们会在24小时内与您取得联系。