【发布时间】:2019-01-18 07:24:09
【问题描述】:
我有 libA.so、libB.so 和一个可执行文件“foo”。 'foo' 需要 libB.so,而 libB.so 本身也需要 libA.so。在链接期间 foo 显式链接到 libB 因为它直接使用其中的符号。 'foo' 不直接使用 libA 中的符号。链接“foo”时,ld 想检查它是否可以解析来自 libA 中的 libB 的符号引用,但找不到 libA。我可以使用 -Wl,rpath-link= 让它找到 libA,或者我可以使用 -Wl,--allow-shlib-undefined 让链接器忽略 libA。
问题是我不应该设置这些选项中的任何一个,因为 libB.so 包含一个 rpath,它告诉链接器在哪里可以找到 libA.so,并且链接器在运行时使用这个 rpath 来成功找到 libA。那么为什么它不在链接时使用它呢?在这种情况下,强制 foo 的构建配置知道 libA 在哪里似乎完全没有必要?
【问题讨论】:
标签: linker shared-libraries ld