9

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

我构建它并在 x-code 中运行它会吐回来:

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 中最好的/最优雅的/最容易做到的吗?

4

3 回答 3

4

我刚刚使用 Module Bundle 项目完成了这一点。这被包含在一个带有单独可执行文件的更大项目中。

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

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

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

于 2009-06-15T11:04:36.253 回答
2

如果我正确理解您的问题,那么您的应用程序构建良好,链接时没有错误,但是当您尝试启动它时,找不到该库。

这并不奇怪,因为 dylib 文件位于系统路径之外的某个任意目录中。您需要将其复制到/usr/lib(可能不是一个好主意)或将其包含在应用程序包中。后者可能是更好的方法。

我从未尝试过,但显然您需要使用Copy Files Build Phase将 dylib 放入您的包中,然后配置 Xcode,以便您的可执行文件知道在哪里找到它。

于 2009-03-12T02:51:52.910 回答
0

您只需将库从目录拖到您的 Xcode 项目中,最好拖到资源中,但这并不重要(我相信)。我尝试了检查和不检查“将文件复制到包中”,它在这两种情况下都有效,不确定是否需要将它包含在包中进行部署。

我已经用 sqlite3 和 cocoa 应用程序(cocoa-touch)对此进行了测试。

于 2009-06-15T03:40:38.557 回答