gpt4 book ai didi

c++ - 链接依赖

转载 作者:太空狗 更新时间:2023-10-29 11:47:13 25 4
gpt4 key购买 nike

从/some/lib 中的共享库 libA.so 开始。我构建了依赖于 libA.so 中的功能的库 (libB.so)。因此,在创建 libB.so 时,我在 g++ 命令行中包含了 -L/some/lib -lA。libB.so 也将驻留在/some/lib 中。

现在,我正在构建一个将使用 libB.so 的可执行文件。我向 g++ 链接器提供了预期的 -L/some/lib 和 -lB。但是我得到一个错误,因为它找不到“libA.so”。如果我将“-lA”添加到链接器行,程序就会链接。

我不明白为什么它找不到“libA.so”。我当然不明白为什么在链接器行中包含“-lA”可以让它找到它。它似乎已经知道它需要 libA.so,并且 libA.so 与 libB.so 在同一路径中。

谁能解释一下?我不喜欢必须在每个想要链接 libB.so 的可执行文件中显式放置“-lA”的想法。我做错了什么吗?

最佳答案

当您仅针对 libB 进行链接时,链接器会查找 libA,但找不到它,因为它不在链接器/加载器的可查找路径中.您必须在链接阶段设置 LD_LIBRARY_PATH(和/或 LD_RUN_PATH),否则将 libB-rpath/some/链接库

假装 libB 本身是一个可执行文件,我们称它为 foo。您不能只在命令行中说 ./foo 因为找不到 libA(检查 ldd foo 以检查加载程序路径).相反,你需要

LD_LIBRARY_PATH=/some/lib ./foo

或者您需要使用rpath 进行编译。 (在 g++ 中,您会说 g++ -Wl,-rpath,/some/lib ... 将选项传递给链接器。)相同的加载时间解析过程适用于动态库本身。

关于c++ - 链接依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6884375/

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