在Ubuntu上,我有两个目录:buildsrc。在src中,我的CMakeLists.txt文件包含以下行:

add_executable(Test main.cpp)

target_link_libraries(Test libCamera.so)

在构建目录(cmake ../src)中运行cmake之后,然后将库文件libCamera.so复制到构建目录中。运行make之后,main.cpp.o文件成功编译,但是在链接过程中出现以下错误:
/usr/bin/ld: cannot find -lCamera

为什么是这样?共享库位于我要建立的目录中...如果我将共享库复制到/usr/bin ...,也会发生同样的事情...

最佳答案

您不应该在库中添加前缀lib和后缀.so,因此只需使用:

target_link_libraries(Test Camera)

如果找不到您的库,则可能需要添加目录,该目录位于该库所在的位置:
link_directories( /home/user/blah ) # for specific path
link_directories( ${CMAKE_CURRENT_BINARY_DIR} ) # if you put library where binary is generated

注意:您将lib复制到/usr/bin,但与Windows操作系统不同,在Windows中,dll文件与可执行文件一起存储,在Linux中不是这样,因此它将是/usr/lib,而不是/usr/bin。另外,您可以更改LD_LIBRARY_PATH变量,以使程序在自定义位置中查找库。

关于c++ - CMake链接到共享库找不到​​库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31413366/

10-16 05:20