gpt4 book ai didi

linux - gnu ld 链接器行为的变化

转载 作者:太空宇宙 更新时间:2023-11-04 04:16:05 24 4
gpt4 key购买 nike

当我从使用 GNU ld 版本 2.20 到 2.21 时,我开始看到以下行为变化。不确定 2.20 中的行为是否已在 2.21 中修复,或者是否存在其他问题。

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 的私有(private)命名空间中可用?

谢谢。

最佳答案

So my question is : What is the right behavior

新的行为是正确的。

If a .so has dependencies, then are they considered when searching for symbols used directly in the executable

没有。无论 libfoobar.so 具有什么依赖项,都是一个私有(private)实现细节,明天可能会改变。您不应该指望它。如果您使用 libfoo.so 中的符号,那么您应该在命令行上指定-lfoo

关于linux - gnu ld 链接器行为的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16344160/

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