【问题标题】:how to link libs (.so y .a) properly with cmake如何使用 cmake 正确链接库(.so y .a)
【发布时间】:2013-10-14 03:17:54
【问题描述】:

好的,假设我已经构建了一些名为 libImmortal.alibUglyFace.so 的库。第一个在~/LakeOfBlood/lib 中,第二个在/usr/lib 中通过make install 安装。作为奖励,我做了一个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: error while loading shared libraries: libUglyFace.so: cannot open shared object file: No such file or directory

这两个库不是我的,它们带有一个名为OccultGod 的示例。如果我这样做 ldd OccultGod 我得到了:

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

现在,

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

【问题讨论】:

    标签: c++ linux g++ cmake


    【解决方案1】:
    1. 使用路径而不是目标名称:target_link_libraries(OccultGod /usr/lib/libUglyFace.so)
    2. 我没明白这里有什么问题,但你不应该把T 写成/home/OftheBeast 大写吗?
    3. 我想是因为它被 rpath'ed 变成了可执行文件。 make install 您的项目或者不要在target_link_libraries() 中使用目标名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      相关资源
      最近更新 更多