在Ubuntu上,我有两个目录:build
和src
。在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
,就会发生同样的事情......
答案 0 :(得分:4)
您不应该放置库的前缀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那样存放可执行文件的dll文件,而Linux则不是这样,所以它是/usr/lib
,而不是/usr/bin
。您也可以更改LD_LIBRARY_PATH
变量,使程序在自定义位置找到库。