【问题标题】:Cmake linking to shared library cannot find libraryCmake链接到共享库找不到​​库
【发布时间】:2015-10-03 11:42:54
【问题描述】:

在 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...

【问题讨论】:

    标签: c++ cmake makefile


    【解决方案1】:

    你不应该把库的前缀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 变量以使您的程序在自定义位置查找库。

    【讨论】:

    • 如果我这样做,我会收到与以前相同的错误消息:Linking CXX executable Test, /usr/bin/ld: cannot find -lCamera
    • 我已将行 link_directories(/home/karnivaurus/Projects/Test/build) 添加到我的 CMakeLists.txt 文件中,但我仍然收到相同的错误....但是,如果我按照您的建议将库复制到 /usr/lib,它编译得很好......知道为什么第一次尝试没有解决它吗?
    • @Karnivaurus btw for build 你应该使用上面提到的 cmake var,但完整路径应该仍然有效。为什么不查看实际的 CMakeLists.txt 就很难说
    • @Karnivaurus 请注意,二进制文件正在构建并链接到 build/src 子目录中。如果你把 lib 放在那里,你可能不需要添加那个目录。但通常你不应该在那里复制库,而是使用find_library()
    猜你喜欢
    • 2012-09-30
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多