【发布时间】:2016-08-26 20:25:08
【问题描述】:
如何在 cmake 中将共享对象链接到我自己的代码?
我想将 OpenCV,我的意思是 libopencv_***.so.3.1 或类似的东西链接到我自己的软件包。
在这种情况下,我相信以下几行是这个问题的答案。
...
find_package(OpenCV 3.1)
include_directories(${OpenCV_INCLUDE_DIRS})
link_directories(${OpenCV_LIBRARY_DIRS})
...
target_link_libraries(my_node ${OpenCV_LIBRARIES})
但是,这就是这个问题。 我之前在 /usr/include 和 /usr/lib/x86_64-linux-gnu 下安装了 OpenCV 2.4.8,现在我想使用安装在本地目录“~/Libs/opencv”中的 OpenCV 3.1.0代码。 所以编译代码时,OpenCV 2.4.8 优先使用。
在这种情况下,我应该如何描述 CMakeLists.txt ?
目前我的写作如下。
...
set(CMAKE_PREFIX_PATH ${HOME}/Libs/opencv)
include(${HOME}/Libs/opencv/share/OpenCV/OpenCVConfig.cmake)
find_package(OpenCV 3.1)
set(OpenCV_INCLUDE_DIRS ${HOME}/Libs/opencv/include)
include_directories(${OpenCV_INCLUDE_DIRS)
set(OpenCV_LIBRARY_DIRS ${HOME}/Libs/opencv/lib)
link_directories(${OpenCV_LIBRARY_DIRS})
...
上面的 CMakeLists.txt 对我有帮助。
如果将可执行文件复制到 libopencv_***.so.3.1 所在的同一目录,则上述 CMakeLists.txt 有效。
否则,“make”会失败。
但我想让它独立于包含可执行文件的目录。
这个问题我该怎么办? 提前致谢。
【问题讨论】:
-
一小时内获得 4 次赞...?
-
您必须使用 BEFORE 和 AFTER 调整库的顺序。
-
看看这个:cmake.org/Wiki/CMake_RPATH_handling 它会有所帮助
-
谢谢!有效 !我在cmake文件中添加了
set(CMAKE_SKIP_BUILD_RPATH FALSE)set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)set(CMAKE_INSTALL_RPATH "<path-to-opencv-lib-directory>")set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)。