我有一个项目,在子目录中包含 opencv 的预构建版本。例如:
我的项目
* CMakeLists.txt
* src
* 第三者
** CMakeLists.txt
** 开放式CV
**** 包括
**** 库
我想链接位于third_party目录中的opencv版本。我的问题是,如何通知 CMake 链接到 lib 中预构建的 dylib 文件,并将标头包含在相关的 opencv 目录中?
cmake_minimum_required(VERSION 2.8.9)
project (myproject)
include_directories(${CMAKE_SOURCE_DIR}/third_party/opencv/include)
link_directories(${CMAKE_SOURCE_DIR}/third_party/opencv/lib)
file(GLOB SOURCES "*.cpp")
add_executable(myproject ${SOURCES})
target_link_libraries(myproject opencv_calib3d opencv_contrib opencv_core opencv_highgui opencv_features2d opencv_highgui opencv_imgproc)
我已经在具有 XCode 7.0.1 的 OS X 10.11 上使用 CMake 3.3.2 尝试了您的示例。
使用link_directories() https://cmake.org/cmake/help/v3.4/command/link_directories.html and target_link_libraries() https://cmake.org/cmake/help/v3.4/command/target_link_libraries.html@Tsyvarev 建议的方法似乎可以工作,不会引发任何链接器警告或错误(它发现.dylib
我放置在的库third_party
目录)。
只是一个视图提示,希望可以让您了解为什么它无法在您的 Mac 上运行。
-
通过您的代码,我得到以下命令行链接器文件(在 CMake 的二进制输出目录中):
CMakeFiles/myproject.dir/src/link.txt
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
-Wl,-search_paths_first
-Wl,-headerpad_max_install_names
CMakeFiles/myproject.dir/src/main.cpp.o -o myproject
-L[...CMAKE_SOURCE_DIR...]/third_party/opencv/lib
-lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_highgui -lopencv_features2d -lopencv_highgui -lopencv_imgproc -lopencv_features2d -lopencv_imgproc
-Wl,-rpath,[...CMAKE_SOURCE_DIR...]/third_party/opencv/lib
-
您可以尝试提供完整的库路径,因为 CMake 本身还会额外检查这些路径,并且我链接的内容会更加明显。这是您的示例的修改版本:
CMakeLists.txt
cmake_minimum_required(VERSION 2.8.9)
project (myproject)
include_directories(${CMAKE_SOURCE_DIR}/third_party/opencv/include)
file(GLOB SOURCES "src/*.cpp")
file(GLOB LIBRARIES "third_party/opencv/lib/*.dylib")
message("LIBRARIES = ${LIBRARIES}")
add_executable(myproject ${SOURCES})
target_link_libraries(myproject ${LIBRARIES})
使用此 CMake 只需将完全限定的路径(相对于我的二进制输出目录)添加到链接器文件中。这-L
and -l
选项消失了,你会得到如下“行”:
../third_party/opencv/lib/libopencv_calib3d.dylib
其他问答参考
- Mac OS X 上的 OpenCV 安装 https://stackoverflow.com/questions/19671827/opencv-installation-on-mac-os-x
- 如何在应用程序中使用dylib文件? https://stackoverflow.com/questions/21400478/how-to-use-dylib-file-in-application
- 来自库的 CMake link_directories https://stackoverflow.com/questions/31153019/cmake-link-directories-from-library
- 强制 CMake 使用完整的库路径 https://stackoverflow.com/questions/33165270/force-cmake-to-use-the-full-library-path
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)