符号保持在本地但未正确导出

时间:2015-01-18 10:49:13

标签: c gcc gtk shared-libraries

一位同事给了我一个共享库的修改版本,在那里他添加了一个GTK小部件 检查共享库文件时,我发现新的小部件功能被定义为本地而非全局 我试图在函数上设置GCC的可见性属性(在声明本身之后,在分号之前),它周围有G_BEGIN_DECLS和相同的公共头,并定义为库中正确导出的其他文件。
是否存在我可能缺少的链接器命令行选项?一个"可以"的文件列表gcc使用的导出,也许是导出函数的另一个定义?

2 个答案:

答案 0 :(得分:2)

  

检查共享库文件时,我看到新的窗口小部件功能被定义为本地而非全局。

默认情况下,导出共享库中的所有符号(除非您使用-fvisibility=hiddenprotected进行编译。

因为观察到你的符号是LOCAL,所以你的链接命令使用链接器版本脚本来控制符号可见性(隐藏除了显式导出的符号之外的所有符号),并且你有没有修改该版本脚本以将您的功能添加到导出列表。

在链接命令行中查找-Wl,--version-script=...,并相应地修改版本脚本。

另见this answer

答案 1 :(得分:2)

我发现该库使用正则表达式来过滤导出(-export-symbols-regex开关),添加另一个正则表达式使符号正确导出,现在我所有内容都正确链接。