【发布时间】:2013-05-02 17:27:57
【问题描述】:
当我从使用 GNU ld 版本 2.20 转到 2.21 时,我开始看到以下行为变化。不确定是 2.21 中修复的 2.20 中的错误行为还是发生了其他问题。
libfoo.so : provides symbols foo()
libfoobar.so : provides symbol bar() and specifies libfoo.so in its DT_NEEDED slot
main.cpp : uses symbols foo() as well as bar()
以前,我可以通过以下方式构建 main.cpp:
g++ main.cpp -lfoobar
foobar.so 对 foo.so 的内部依赖将确保找到 foo() 和 bar()
现在,上述方法不起作用,我还必须明确链接 foo :
g++ main.cpp -lfoobar -lfoo
所以我的问题是:什么是正确的行为 - 如果 .so 具有依赖项,那么在搜索可执行文件中直接使用的符号时是否会考虑它们,或者这些依赖项是否仅在 .so 的私有命名空间中可用?
谢谢。
【问题讨论】: