我有以下问题。我有一个共享库,它只是一堆链接在一起的翻译单元,因此当我编译该共享库时,我不会得到任何链接器错误(未定义的引用,即使我可能有)。
共享库从一个可执行文件动态加载,该可执行文件还包含我的共享库正在使用的导出(我的库中使用的引用在运行时被解析)。
主要问题是我想要未定义的引用警告,以便我可以静态修复它们而不是等待应用程序崩溃。
我读到了一个我可以通过的地方" -Wl, - no-undefined"到gcc所以我可以回复这些错误,确实它有效,但它也给了我可执行文件导出的所有未定义的引用。我想在我的翻译单元范围内过滤这些警告。
这可能吗?如果没有,我如何定义对具有共享库导出的可执行文件的引用。
答案 0 :(得分:1)
你可以尝试链接库和&主程序-Wl,-z,now
。应该使运行时ldso立即解析所有引用,如果没有找到则抛出错误。
否则,我没有在链接器手册中看到一个选项,说&#34;允许此ELF满足符号,但实际上并未将其列为DT_NEEDED&#34;。< / p>
你可以尝试使用-Wl,--no-undefined
并使用脚本解析输出,这样你就可以过滤掉你知道主程序会满意的符号。
另一种选择可能是标记主程序为__attribute__((weak))
提供的所有符号,然后仍然使用-Wl,--no-undefined
。弱符号不会被报告为错误。