gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:01 26 4
gpt4 key购买 nike

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

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

主要问题是我想要 undefined reference 警告,这样我就可以静态修复它们,而不是等待应用程序崩溃。

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

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

最佳答案

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

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

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

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

关于c++ - GCC 将共享库链接到可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36367365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com