我有一个库libmysqlclient.16.dylib
,我需要在运行我的应用程序的计算机上使用它,否则我将收到以下错误:
Dyld错误消息:库没有 加载: /usr/local/mysql/lib/libmysqlclient_r.16.dylib 参考自:/ Users / alex / snow server 3.app/Contents/MacOS/snow 服务器原因:未找到图像
这很奇怪,因为我将二进制文件与此库链接。
如果目标计算机上存在相同的dylib,但是版本不同(例如,Snow Leopard Server),则会出现如下错误:
Dyld错误消息:库没有 加载: /usr/local/mysql/lib/libmysqlclient_r.16.dylib 参考自:/ Users / alex / snow server 3.app/Contents/MacOS/snow 服务器原因:没有合适的图像 找到。找到了: /usr/local/mysql/lib/libmysqlclient_r.16.dylib: mach-o,但错误的架构
我想链接到这个库,但不必使用它的本地副本。这可能吗?
更新 - 当我尝试使用install_name_tool时,我没有任何更改:
bash-3.2#otool -L libmysqlclient.16.dylib libmysqlclient.16.dylib: libmysqlclient.16.dylib (兼容版本16.0.0,当前 版本16.0.0) /usr/lib/libSystem.B.dylib (兼容版本1.0.0,当前 版本123.0.0) /usr/lib/libz.1.dylib(兼容性 版本1.0.0,当前版本1.2.3) /usr/lib/libstdc++.6.dylib (兼容版本7.0.0,当前 版本7.9.0)bash-3.2# install_name_tool -change libmysqlclient.16.dylib @executable_path /../框架/ libmysqlclient.16.dylib 用法:install_name_tool [-change old 新] ... [-rpath old new] ... [-add_rpath new] ... [-delete_rpath 老] ... [-id name]输入bash-3.2# install_name_tool -change libmysqlclient.16.dylib @executable_path /../框架/ libmysqlclient.16.dylib libmysqlclient.16.dylib bash-3.2# otool -L libmysqlclient.16.dylib libmysqlclient.16.dylib: libmysqlclient.16.dylib (兼容版本16.0.0,当前 版本16.0.0) /usr/lib/libSystem.B.dylib (兼容版本1.0.0,当前 版本123.0.0) /usr/lib/libz.1.dylib(兼容性 版本1.0.0,当前版本1.2.3) /usr/lib/libstdc++.6.dylib (兼容版本7.0.0,当前 版本7.9.0)
解 我在构建阶段添加了一个脚本: install_name_tool -change libmysqlclient.16.dylib @executable_path /../ Frameworks / libmysqlclient.16.dylib $ CONFIGURATION_BUILD_DIR / $ PRODUCT_NAME.app / Contents / MacOS / $ PRODUCT_NAME 这修复了一个执行产品的libpath,并且与lib一起工作正常。
答案 0 :(得分:1)
首先,您需要确保将此库复制到应用程序包中,以便在用户的计算机上可用。为此,请为应用程序添加新的“复制文件”构建阶段,以复制捆绑的框架。在该构建阶段的属性中,确保目标是Frameworks。将您的库从项目拖到该构建阶段,以确保它与您的应用程序一起打包。
您可能还需要修改库本身,使其指向应用程序包中的正确位置。在过去,我通过在项目目录中复制库来完成此操作,然后使用以下命令修改库期望找到的位置:
install_name_tool -id @executable_path/../Frameworks/libftd2xx.0.1.0.dylib libftd2xx.0.1.0.dylib
在这种情况下,被修改的库称为libftd2xx.0.1.0.dylib
。
您可以使用命令
otool -L [library filename]
查看库期望自己找到的路径,并确定是否需要进行此更改。
确保在Xcode项目中更改库的路径,以便链接到位于项目目录中的库的新修改版本。