gpt4 book ai didi

c++ - 如何使用 cmake 正确链接库(.so y .a)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:46 24 4
gpt4 key购买 nike

好吧,假设我已经构建了一些名为 libImmortal.alibUglyFace.so 的库。第一个在 ~/LakeOfBlood/lib 中,第二个通过 make install 安装在 /usr/lib 中。作为奖励,我做了一个 ldconfig

现在在 ~/LakeOfBlood 我想编辑 CMakeList.txt。我添加库:

project (LOB)
.
.
.
# (the binary will be built in ~/LakeOfBlood)
link_directories(${LOB_BINARY_DIR}/lib)
.
.
.
target_link_libraries(LakeOfBlood UglyFace Immortal)

但是当我编译 ld 时找不到 Immortal

我仍然可以通过更改链接:

target_link_libraries(LakeOfBlood UglyFace Immortal)

通过

target_link_libraries(LakeOfBlood UglyFace /home/OftheBeast/LakeOfBlood/Immortal.a)

然后 ld 工作。

...BUTT,是的,有一个 f* * * * * * “但是”...

当我启动 LakeOfBlood 时,我得到:

./LakeOfBlood:加载共享库时出错:libUglyFace.so:无法打开共享对象文件:没有这样的文件或目录

这两个库不是我的,它们附带一个名为 OccultGod 的示例。如果我执行 ldd OccultGod 我得到:

libUglyFace.so =>/home/OfTheBeast/LakeOfBlood/lib/libUglyFace.so (0x0000666)

现在,

  1. 我如何告诉 OccultGod 使用 /usr/lib/libUglyFace.so 而不是上面的那个? (通过他自己的 CMakeList.txt)
  2. 如何为 libImmortal.a 修复我的 CMakeList.txt
  3. 你能给我解释一下为什么 LakeOfBlood 看不到 /usr/lib/libUglyFace.so。我的意思是 /usr/lib 是标准路径吗?然后我认为那里的每个库都会被任何二进制文件自动找到...

最佳答案

  1. 使用路径而不是目标名称:target_link_libraries(OccultGod/usr/lib/libUglyFace.so)
  2. 我不明白这里有什么问题,但你不应该在 /home/OftheBeast 大写中制作 T 吗?
  3. 我想是因为它被 rpath 转换为可执行文件。要么 make install 您的项目,要么不要在 target_link_libraries() 中使用目标名称。

关于c++ - 如何使用 cmake 正确链接库(.so y .a),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19353010/

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