繁体   English   中英

GCC 将共享库链接到可执行文件

[英]GCC Linking a shared library against an executable

我有以下问题。 我有一个共享库,它只是一堆链接在一起的翻译单元,所以当我编译那个共享库时,我不会得到任何链接器错误(未定义的引用,即使我可能有)。

共享库从一个可执行文件动态加载,该可执行文件还包含我的共享库正在使用的导出(我的库中使用的引用在运行时解析)。

主要问题是我想要未定义的引用警告,以便我可以静态修复它们,而不是等待应用程序崩溃。

我在某处读到我可以将“-Wl,--no-undefined”传递给gcc,这样我就可以恢复这些错误,确实有效,但它也给了我可执行文件导出的所有未定义引用。 我想将这些警告过滤到我的翻译单元的范围内。

这可能吗? 如果没有,我如何定义对具有共享库导出的可执行文件的引用。

您可以尝试使用-Wl,-z,now链接库和主程序。 这应该使运行时 ldso 立即解析所有引用,如果没有找到则抛出错误。

否则,我在链接器手册中没有看到一个选项说“允许这个 ELF 满足符号,但实际上不要将它列为 DT_NEEDED”。

您可以尝试使用-Wl,--no-undefined并使用脚本解析输出,以便过滤掉您知道主程序会满足的符号。

另一种选择可能是用__attribute__((weak))标记您知道主程序提供的所有符号,然后仍然使用-Wl,--no-undefined 弱符号不会被报告为错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM