【问题标题】:CMake Linking PathCMake 链接路径
【发布时间】:2026-01-03 08:45:01
【问题描述】:

我正在尝试将程序链接到 OpenCV 库,这些库位于:/usr/local/lib

所以在 CMakeLists.txt 我放了:

TARGET_LINK_LIBRARIES(myprogram 
    opencv_core 
    opencv_imgproc
    opencv_highgui
    opencv_imgproc
    opencv_objdetect
)

继续建设,但如果我这样做:

ldd myprogram

我明白了:

...
libopencv_core.so.2.4 => not found
libopencv_imgproc.so.2.4 => not found
libopencv_highgui.so.2.4 => not found
libopencv_objdetect.so.2.4 => not found

所以为了能够运行它,我必须每次都将 /usr/local/lib 添加到 $LD_LIBRARY_PATH

我做错了什么?

更新

我已将 TARGET_LINK_LIBRARIES 配置替换为这个:

TARGET_LINK_LIBRARIES(myprogram ${OpenCV_LIBS})

现在它可以正确链接库了.. 但是所有这些库!

【问题讨论】:

    标签: c++ opencv hyperlink cmake


    【解决方案1】:

    确保您的环境变量设置正确,然后在您的 CMakeList 文件中使用这些行。

    FIND_PACKAGE( OpenCV REQUIRED )
    TARGET_LINK_LIBRARIES( myProject ${OpenCV_LIBS} )
    

    【讨论】:

    • 我做到了,它找到了包(没有蛋糕错误并且构建/链接成功)但是在二进制文件之后它实际上并没有链接..也许 /usr/local/lib 在 CMake 库路径中但是不在系统中
    • 你能检查一下 CMake 是否确实链接到了正确的文件夹..?老实说,这很不寻常。
    • 我添加了一个 MESSAGE("OpenCV_LIBS: ${OpenCV_LIBS}") 并输出:debug;/usr/local/lib/libopencv_core.so;debug;/usr/local/lib/libopencv_features2d。所以;调试;/usr/local/lib/libopencv_flann.so;调试;/usr/local/lib/libopencv_highgui.so;...
    • 任何运气..?我无法在我的机器上复制您的错误..您正在尝试链接到 OpenCV 2.4,对吧..?你能给我更多关于你的操作系统和系统的细节吗?也许使用更新的 OpenCV 版本就可以了。
    • 好吧,更新是:使用 TARGET_LINK_LIBRARIES(myProject ${OpenCV_LIBS}) 它可以工作,但会链接所有库。如果我只想链接其中的一个子集,它就行不通。使用 BOOST 我没有这种问题,也许在 find_package 我应该只指定需要的模块
    【解决方案2】:

    您还需要配置动态库加载器以包含这些目录。添加/etc/ld.so.conf文件的路径或在/etc/ld.so.conf.d/目录下创建.conf文件

    【讨论】:

    • 好的,但我不明白为什么在构建/链接时一切都很好,而不是之后。
    • 我的 ld.so.conf 文件包含: /usr/X11R6/lib64/Xaw3d /usr/X11R6/lib64 /usr/lib64/Xaw3d /usr/X11R6/lib/Xaw3d /usr/X11R6/ lib /usr/lib/Xaw3d /usr/x86_64-suse-linux/lib /usr/local/lib /opt/kde3/lib /lib64 /lib /usr/lib64 /usr/lib /usr/local/lib64 /usr/ local/lib 和结果是一样的