gpt4 book ai didi

cmake - 如何配置 cmake 以链接到预构建的共享库?

转载 作者:行者123 更新时间:2023-12-01 07:34:21 31 4
gpt4 key购买 nike

我有一个项目,在子目录中包含一个预构建版本的 opencv。例如:

我的项目
* CMakeLists.txt
* 源代码
* 第三者
** CMakeLists.txt
** opencv
**** 包括
**** 库

我想链接到位于 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() target_link_libraries() @Tsyvarev 建议的方法似乎可以在不引发任何链接器警告或错误的情况下工作(它找到了我放置在 .dylib 目录中的 third_party 库)。

只是一个 View 提示,希望可以让您了解为什么它不能在您的 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-l选项消失了,你会得到“行”,如:
    ../third_party/opencv/lib/libopencv_calib3d.dylib 

  • 其他问答引用
  • OpenCV installation on Mac OS X
  • How to use dylib file in application?
  • CMake link_directories from library
  • Force CMake to use the full library path
  • 关于cmake - 如何配置 cmake 以链接到预构建的共享库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32980381/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com