c++ - 如何在 Xcode 中链接动态库?

标签 c++ xcode macos dylib

我目前正在 Qt 中开发一个程序,它使用库 libqextserialport.1.dylib。

我构建它并在 x 代码中运行,它吐回:

dyld: Library not loaded: libqextserialport.1.dylib
    Referenced from: /Users/samuelreh/Desktop/QtOpenCV/build/Debug/QtOpenCV.app/Contents/MacOS/QtOpenCV
    Reason: image not found

库位于/Users/samuelreh/Desktop/QtOpenCV/qextserialport/build/。

我可以通过更改到可执行文件夹/Users/samuelreh/Desktop/QtOpenCV/build/Debug/QtOpenCV.app/Contents/MacOS/并输入来运行我的程序:

install_name_tool -change libqextserialport.1.dylib/Users/samuelreh/Desktop/QtOpenCV/qextserialport/build/libqextserialport.1.dylib QtOpenCV

我知道除此之外可能还有很多解决方案。有人知道 x-code 中最好/最优雅/最简单的做法吗?

最佳答案

我刚刚通过一个 Module Bundle 项目做到了这一点。这被包含在一个更大的项目中,具有单独的可执行文件。

我添加了“将动态库复制到框架”步骤,将动态库复制到/Foobar.bundle/Contents/Frameworks/Foobar/。然后我添加了一个运行脚本阶段作为最后一步运行,以修复可执行文件中 dylibs 的安装名称:

install_name_tool -change libBobDylan.dylib @executable_path/../Plugins/Foobar.bundle/Contents/Frameworks/Foobar/libBobDylan.dylib path/to/build/product/Foobar.Bundle/Contents/MacOS/Foobar

当然,libBobDylan.dylib 也链接到 libBillyIdol.dylib。所以我不得不在目标的最开始添加另一个运行脚本阶段来修复这里的安装名称:

install_name_tool -change libBillyIdol.dylib @executable_path/../Plugins/FooBar.bundle/Contents/Frameworks/Foobar/libBillyIdol.dylib local/path/to/libBobDylan.dylib

我有十几个这样的链接;我不得不说服 dylibs 的供应商填充他们的标题以适应我的许多 install_name 更改......

关于c++ - 如何在 Xcode 中链接动态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/637081/

相关文章:

macos - 无法在MacOS-Sierra上启动XAMPP Apache服务器

c++ - 对于 GCC <5,是否有 std::put_time 的内置替代方案?

ios - 项目文件问题

c++ - 初始化空的2D vector ?

SwiftUi - 无法更改/无法访问背景

Xcode:无法构建 ParseFacebookUtilsV4 (Cocoapods)

android - Mac/Windows 和 Android 之间的 WiFi-Direct 通信

python - 使用 Python 代替 AppleScript

创建类的一个点后的c++段错误

c++ - boost::mpi 在具有相同标签的多个 isend/irecv 传输中抛出 MPI_ERR_TRUNCATE