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

2024-06-19

我有一个项目,在子目录中包含 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(使用前将#替换为@)

如何配置 cmake 以链接到预构建的共享库? 的相关文章

随机推荐

  • 为什么我会遇到分段错误?

    我只想创建一个简单的 C 结构 它有一个 int 索引和一个 int greyValue 该函数被赋予带有灰度值的向量 当我尝试编译它时 出现分段错误 有人知道为什么吗 没有对向量进行排序 谢谢 vector
  • Xcode 6 仪器冻结

    在 Xcode 6 Instruments 中分析我的 iOS 8 应用程序将运行该应用程序约 5 秒 然后冻结 此后探查器仍将运行 但应用程序已冻结且无法使用 发生在设备和模拟器上 无论我使用哪个分析器 计时器 泄漏等 从调试器或临时构建
  • AngularJS 指令的完整列表?

    我正在学习 AngularJS 是否有所有开箱即用指令的完整列表 这FAQ http docs angularjs org misc faq提及ng repeat ng show and ng class 但我感觉还有更多 奇怪的是我找不到
  • Typescript 生成带有“#private;”字段的声明 d.ts 文件

    我有一个用 Typescript 编写的库 它分布在 2 个文件中 一个已编译的 ECMAScript 2015 兼容 Javascript 文件index js和一个 Typescript 声明文件index d ts 我的目标是让 Ja
  • 在 .Net 中创建 EPUB

    有没有可以用来在 NET C 中创建 epub 文件的库 Flowdocument gt epub 转换工具将是理想的选择 但任何类型的库都很棒 我还对评估编写一个程序的复杂程度感兴趣 我知道它基本上是一堆压缩的 XHTML 文件 但我不断
  • AWK数组初始化

    是否可以使用常见的方法在AWK中初始化数组list syntax array val1 val2 val3 或者是否必须使用索引值 syntax array 0 val1 array 1 val2 array 2 val3 不 不 您可以这
  • libmysqlclient.a 和 libmysqlclient_r.a 有什么区别?

    我应该使用哪个来链接 mysqlclient 库 它们之间有什么区别 我似乎找不到答案 谢谢 较新版本的 MySQL 客户端发行版不包含 r 版本 有些可能有从 libmyqslclient r a 到 libmyqslclient a 的
  • Java 中查看 ArrayList 是否包含对象的最有效方法

    我有一个 Java 对象的 ArrayList 这些对象有四个字段 我用其中两个字段来将对象视为与另一个对象相等 我正在寻找最有效的方法 给定这两个字段 以查看数组是否包含该对象 问题在于这些类是基于 XSD 对象生成的 因此我无法修改类本
  • SVN错误155009:无法运行WC DB工作\无法打开文件\系统找不到指定的文件

    I found 信息贫乏 https www google com webhp q 22Failed 20to 20run 20the 20WC 20DB 20work 20queue 20associated 20with 22 20 2
  • 本地主机中的 Ansible SSH 连接错误

    当我针对本地主机启动我的剧本时 出现此错误 TASK setup fatal 127 0 0 1 UNREACHABLE gt changed false msg SSH encountered an unknown error durin
  • 罗莎琳德《孟德尔第一定律》 IPRB

    作为即将到来的生物信息学课程的准备 我正在做一些来自 rosalind info 的作业 我目前正陷入任务 孟德尔第一定律 http rosalind info problems iprb 我想我可以用蛮力强迫自己解决这个问题 但不知怎的
  • 如何在 IE 中检测开窗器

    我在堆栈上找不到任何好的答案 它们与对话框 文本编辑器有关 并且有人使用 VBScript 我需要向开窗器发送消息 这在 FF Chrome 和 Opera 中运行良好 但是window opener在 IE8 10 中为空 我在用wind
  • 删除网格 Tkinter 中的某些行/列

    如果我在同一框架中有多个行和列 并且有多个条目 标签小部件 是否可以仅选择其中一个并将其删除 同时保留其他小部件 e g class Window def init self self root Tk self win1 Frame sel
  • Rails 4 - 每次运行 rake db:migrate 命令时,rake 命令都会显示弃用警告

    pinterestclone rake db migrate DEPRECATION WARNING Sprockets method register engine is deprecated Please register a mime
  • 在 Windows 7 上连接到高于 10 的 COM 端口时出现无效句柄错误

    我开发了一个简单的串行端口应用程序 可以在低于 10 的 COM 端口 COM9 COM8 COM1 上正常工作 但是 当我的设备连接到高于 10 的端口 例如 COM11 时 它无法连接 并且我收到 INVALID HANDLE 我的代码
  • 自定义WebApi授权数据库调用

    我正在尝试确定我编写的自定义授权属性是否确实是一个好主意 Scenario假设我们有一系列商店 每个商店Store有一个主人 只有商店的所有者才能对商店进行CRUD操作 除了具有Claim这基本上超越了所有权要求 并表示他们可以在任何商店上
  • 让tox使用pyenv设置的Python版本

    我似乎无法集中精力管理 Python 版本 当我跑步时tox 我可以立即看到它使用的是 Python 3 7 9 tox py39 commands 0 gt coverage run m pytest test session start
  • 在 SwiftUI 中折叠 doubleColumn NavigationView 详细信息,就像在 UISplitViewController 上折叠一样?

    因此 当我在 SwiftUI 中创建列表时 我可以 免费 获得主从拆分视图 例如 import SwiftUI struct ContentView View var people Angela Juan Yeji var body som
  • 没有使用 maven- assembly-plugin 附加源 jar

    我有以下项目 maven 3 10 多项目 my mvn gt my mvn a gt my mvn b gt my mvn assembly my mvn a and my mvn b使用以下命令构建源 jar
  • 如何配置 cmake 以链接到预构建的共享库?

    我有一个项目 在子目录中包含 opencv 的预构建版本 例如 我的项目 CMakeLists txt src 第三者 CMakeLists txt 开放式CV 包括 库 我想链接位于third party目录中的opencv版本 我的问题