【问题标题】:How to link shared object in cmake?如何在cmake中链接共享对象?
【发布时间】: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)。

标签: c++ linux opencv cmake


【解决方案1】:

参见 cmake 的 find_library 文档。 一些预定义的路径用于搜索库。 (取决于平台)。可以通过选项禁用此功能。 尝试 find_package(OpenCV 3.1 PATHS ~/Libs/opencv NO_DEFAULT_PATH NO_SYSTEM_ENVIRONMENT_PATH)

【讨论】:

  • 感谢您的评论!实际上这还不够,但我可以解决我上面提到的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
  • 2017-05-29
相关资源
最近更新 更多