gpt4 book ai didi

cocoa - 如何将库捆绑到 Cocoa 应用程序中?

转载 作者:行者123 更新时间:2023-12-03 17:16:26 25 4
gpt4 key购买 nike

我有库libmysqlclient.16.dylib,我需要在运行应用程序的计算机上拥有该库,否则我将收到以下错误:

Dyld Error Message: Library not loaded: /usr/local/mysql/lib/libmysqlclient_r.16.dylib Referenced from: /Users/alex/snow server 3.app/Contents/MacOS/snow server Reason: image not found

这很奇怪,因为我将二进制文件与这个库链接起来。

如果目标计算机上存在相同的 dylib,但版本不同(例如 Snow Leopard Server),我会收到如下错误:

Dyld Error Message: Library not loaded: /usr/local/mysql/lib/libmysqlclient_r.16.dylib Referenced from: /Users/alex/snow server 3.app/Contents/MacOS/snow server Reason: no suitable image found. Did find: /usr/local/mysql/lib/libmysqlclient_r.16.dylib: mach-o, but wrong architecture

我想链接到这个库,但不必使用它的本地副本。这可能吗?

更新 - 当我尝试使用 install_name_tool 时,我没有任何更改:

bash-3.2# otool -L libmysqlclient.16.dylib libmysqlclient.16.dylib: libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 123.0.0) /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3) /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0) bash-3.2# install_name_tool -change libmysqlclient.16.dylib @executable_path/../Frameworks/libmysqlclient.16.dylib Usage: install_name_tool [-change old new] ... [-rpath old new] ... [-add_rpath new] ... [-delete_rpath old] ... [-id name] input bash-3.2# install_name_tool -change libmysqlclient.16.dylib @executable_path/../Frameworks/libmysqlclient.16.dylib libmysqlclient.16.dylib bash-3.2# otool -L libmysqlclient.16.dylib libmysqlclient.16.dylib: libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 123.0.0) /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3) /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 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,并且可以与 bundle 中的 lib 一起正常工作。

最佳答案

首先,您需要确保将此库复制到您的应用程序包中,以便它可以在用户的​​计算机上使用。为此,请为您的应用程序添加一个新的复制文件构建阶段以复制捆绑的框架。在该构建阶段的属性中,确保目标是框架。将您的库从项目拖到构建阶段,以确保它与您的应用程序打包在一起。

您可能还需要修改库本身,以便它指向应用程序包中的正确位置。过去,我通过在项目目录中创建库的副本,然后使用以下命令修改库期望找到自己的位置来完成此操作:

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 项目中库的路径,以便链接到项目目录中这个新的、修改后的库版本。

关于cocoa - 如何将库捆绑到 Cocoa 应用程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5148633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com