免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2679 | 回复: 3
打印 上一主题 下一主题

[C++] UNIX下动态链接库使用的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-24 19:04 |只看该作者 |倒序浏览
程序共有两部分,主程序和动态链接库;
主程序和动态链接库源码中都含有类名相同的一个类,class A,当时内容有这很多差异。
主程序通过dlopen()函数调用动态库接口函数,初始化动态库中得接口类 class inerface,然后再用interface初始化动态链接库中的class A的一个实例,并间接调用其中的函数。
怪异的事情出现了,gdb跟进去后,发现interface中初始化的class A的实例,竟然是住程序中的class A,而非动态链接库中得class A。
两个程序都是单独编译的,makefile中没有重叠的部分。为什么会出现这种情况,还请高人解答

论坛徽章:
5
技术图书徽章
日期:2013-11-07 13:21:58技术图书徽章
日期:2013-12-07 10:34:46技术图书徽章
日期:2014-04-23 08:50:31双鱼座
日期:2014-09-16 09:12:34亥猪
日期:2015-01-23 13:37:49
2 [报告]
发表于 2011-10-25 00:12 |只看该作者
lz没提供代码,我只能猜测。linux/unix中程序加载后符号表只有一个,相同的符号会被覆盖。

你的makefile中给主程序导出符号了?不管主程序还是共享库,不必要的符号不要导出。共享库默认不加static的符号都是导出的哦。

论坛徽章:
0
3 [报告]
发表于 2011-10-25 08:06 |只看该作者
Linux动态库中使用C++不是个好主意,至少用C包一层。编译器本身有可能有问题,尤其是老一点的编译器,编译选项不同也可能导致问题,最后link也有可能有一些符号问题,总之,除非你对动态库与C++的编译链接以及gcc各个版本的bug有深入的理解,否则还是绕开比较好。

论坛徽章:
5
技术图书徽章
日期:2013-11-07 13:21:58技术图书徽章
日期:2013-12-07 10:34:46技术图书徽章
日期:2014-04-23 08:50:31双鱼座
日期:2014-09-16 09:12:34亥猪
日期:2015-01-23 13:37:49
4 [报告]
发表于 2011-10-25 08:11 |只看该作者
C++ ABI复杂啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP