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

时间:2013-10-14 03:17:54

标签: c++ linux g++ cmake

好吧,假设我已经构建了一些名为libImmortal.alibUglyFace.so的库。第一个位于~/LakeOfBlood/lib,第二个位于make install的{​​{1}}。在奖金中我做/usr/lib

现在在ldconfig我要修改~/LakeOfBlood。我添加了libs:

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) 有效。

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

当我开始使用LakeOfBlood时,我得到了:

ld

两个库不是我的,它们带有一个名为./LakeOfBlood: error while loading shared libraries: libUglyFace.so: cannot open shared object file: No such file or directory的样本。如果我OccultGod我得到了:

ldd OccultGod

现在,

  1. 我怎么能说libUglyFace.so => /home/OfTheBeast/LakeOfBlood/lib/libUglyFace.so (0x0000666)使用OccultGod代替上面的/usr/lib/libUglyFace.so? (通过他自己的CMakeList.txt
  2. 如何修复CMakeList.txt
  3. libImmortal.a
  4. 你能解释为什么LakeOfBlood无法看到/usr/lib/libUglyFace.so。我的意思是/usr/lib是标准路径吗?然后我认为那里的每个库都会被任何二进制文件自动找到...

1 个答案:

答案 0 :(得分:0)

  1. 使用路径而不是目标名称:target_link_libraries(OccultGod /usr/lib/libUglyFace.so)
  2. 我不知道这里有什么问题,但是你不应该在T首都做/home/OftheBeast吗?
  3. 我想因为它是可执行文件的rpath。要make install您的项目,要么不要在target_link_libraries()中使用目标名称。
相关问题