Chinaunix

标题: LINUX动态库和程序函数重名的问题 [打印本页]

作者: skywarship    时间: 2012-11-26 14:21
标题: LINUX动态库和程序函数重名的问题
我有一个程序需要用到一个动态库,动态库和程序本身都用到了GSOAP,所以程序和动态库中有重名的函数,链接的
时候报函数重复定义。为了解决这个问题,给动态库中的导出函数加__attribute__((visibility("default")))前缀,
并增加链接参数-fvisibility=hidden,仅导出指定函数,隐藏其他函数,程序编译链接通过。

在调试时发现,动态库对GSOAP函数的调用实际是调用程序中的GSOAP函数,由于程序中的GSOAP版本和动态库
不一致,因此程序运行时会崩溃。为了解决这个问题,将动态库中与程序重名的所有GSOAP函数重新命名,在原函数
名前增加前缀,将动态库中对GSOAP函数的调用改为对新名字函数的调用,然后重新编译链接动态库和程序通过。

但调试时发现,即使对动态库中的GSOAP函数和相应调用做修改,程序运行时动态库对GSOAP函数的调用仍会调用
到程序中的对应原始名字的函数。

不知道有没有哪位高人遇到过这种情况。
作者: skywarship    时间: 2012-11-26 16:37
试着把库改为静态库链接方式,程序可以正常运行。

不知道为什么动态库不行。
作者: 皇家救星    时间: 2012-11-26 23:35
是不是有其它地方有之前的动态库
作者: socay2    时间: 2012-11-27 10:24
如何有效的避免自定义函数和第三方动态库中的函数重名,难道只有修改自己函数的名字吗?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2