gnu ld链接器行为的变化
问题描述:
当我从使用GNU ld版本2.20到2.21时,我开始看到以下行为变化。不确定它是否在2.20中被破坏的行为在2.21中被修复或者其他事情正在发生。gnu ld链接器行为的变化
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(),以及巴()是发现
现在,上面不工作,我必须明确地将富和:
g++ main.cpp -lfoobar -lfoo
所以我的问题是:什么是正确的行为 - 如果一个.so具有依赖关系,那么在搜索可执行文件中直接使用的符号时是否考虑它们,或者这些依赖关系是否仅在.so的私有名称空间中可用?
谢谢。
答
所以我的问题是:什么是正确的行为
新的行为是正确的。
如果一个.so具有相关性,则是直接在可执行文件中使用的符号
无论libfoobar.so
具有依赖性是私人实现细节号,可以改变明天搜索时,他们认为。你应该而不是指望它。如果您使用libfoo.so
中的符号,则您应在命令行中指定指定-lfoo
。