1

好的,假设我已经构建了一些名为libImmortal.aand的库libUglyFace.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工作。

...但是,是的,有 af* * * * * * “但是”...

当我启动 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.txt的问题libImmortal.a
  3. 你能解释一下为什么LakeOfBlood看不到吗/usr/lib/libUglyFace.so?我的意思/usr/lib是标准路径对吗?然后我认为那里的每个库都会被任何二进制文件自动找到......
4

1 回答 1

0
  1. 使用路径而不是目标名称:target_link_libraries(OccultGod /usr/lib/libUglyFace.so)
  2. 我没明白这里有什么问题,但你不应该赚钱T/home/OftheBeast
  3. 我想是因为它被 rpath'ed 变成了可执行文件。您make install的项目或不使用目标名称在target_link_libraries().
于 2013-10-15T09:58:01.613 回答