我目前正在 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/