我有一个库libmysqlclient.16.dylib,我需要在运行我的应用程序的计算机上拥有这个库,否则我会得到以下错误:
Dyld错误消息:库未加载: /usr/local/mysql/lib/libmysqlclient_r.16.dylib引用自:/
//服务器3.app/Content/MacOS/服务器原因:图像未找到
这很奇怪,因为我把二进制文件和这个库连接起来了。
如果目标计算机上存在相同的dylib,但在不同的版本(例如,雪豹服务器)中,我会得到一个错误,如下所示:
/usr/local/mysql/lib/libmysqlclient_r.16.dylib Dyld错误消息:库未加载:
引用自:///服务器3.app/Content/MacOS/服务器原因:没有找到合适的图像。确实发现: /usr/local/mysql/lib/libmysqlclient_r.16.dylib: mach-o,但是架构错误。
我想链接到这个库,但不必使用它的本地副本。这个是可能的吗?
UPDATE -当我尝试使用install_name_tool时,我没有任何更改:
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,当前版本1.2.3) /usr/lib/libstdc++.6.dylib (兼容版本7.0.0,当前版本7.9.0) bash-3.2# install_name_tool -change libmysqlclient.16.dylib -change用法: install_name_tool -change旧新. -rpath旧新. -add_rpath新. -id名称输入bash-3.2# install_name_tool -change libmysqlclient.16.dylib @executable_路径/./Frameworks/ libmysqlclient.16.dylib libmysqlclient.16.dylib bash-3.2# otoollibmysqlclient.16.dylib libmysqlclient.16.dylib: libmysqlclient.16.dylib (兼容性版本16.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 7.9.0(兼容7.0.0,当前版本7.9.0)
在构建阶段添加了一个脚本:@executable_path/../Frameworks/libmysqlclient.16.dylib $CONFIGURATION_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME : install_name_tool -change libmysqlclient.16.dylib --修复了执行产品的libpath,并很好地处理了lib in包。
发布于 2011-02-28 23:28:11
首先,您需要确保将这个库复制到您的应用程序包中,以便在用户的机器上可用。为此,为应用程序添加一个新的复制文件构建阶段,以便复制捆绑的框架。在该构建阶段的属性中,确保目标是框架。将库从项目拖到构建阶段,以确保它与应用程序一起打包。
您还可能需要修改库本身,以便它指向应用程序包中的正确位置。在过去,我通过在我的项目目录中创建一个库的副本,然后使用下面的命令来修改库希望找到自己的位置:
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项目中更改了库上的路径,以便针对驻留在项目目录中的这个新的、修改过的库版本进行链接。
https://stackoverflow.com/questions/5148633
复制相似问题