【问题标题】:Build Cocoa application Bundle with private dylib/framework使用私有 dylib/framework 构建 Cocoa 应用程序包
【发布时间】:2011-11-12 04:44:09
【问题描述】:

我使用 xcode 4 构建一个带有私有 dylib/框架的可可应用程序。

在我的开发Mac中,我把dylib放在/usr/local/lib目录下,然后拖到项目中。

该应用程序已编译并在我的计算机上完美运行。

为了将此应用程序分发到另一台 Mac,我创建了一个复制文件构建阶段,并说“将该 dylib 复制到 Frameworks 目录”。

应用构建成功,我确实看到dylib被复制到了app bundle的Frameworks目录中。

问题是当我在另一个没有安装这个 dylib 的普通 Mac 上运行这个应用程序时。我收到一条错误消息:

dyld: Library not loaded: /usr/local/lib/mylib.dylib

【问题讨论】:

  • 您是从源代码构建库,还是从已经构建的某个地方获取它?

标签: objective-c xcode cocoa frameworks build


【解决方案1】:

问题在于您将框架复制到应用程序包中,因此它可以在以下位置使用:

 <you_app_path>/Contents/Frameworks

但您尝试从 /usr/local/lib 加载它,但它在您的部署计算机上不可用。来自Apple Framework Programming Guide

要将框架嵌入到应用程序中,您必须执行几个步骤:

您必须配置应用程序目标的构建阶段以将框架放置在正确的位置。

您必须配置框架目标的安装目录,该目录告诉框架它将位于何处。

您必须配置应用程序目标,以便它引用其安装目录中的框架。

现在,你说构建阶段没问题;我还假设您正确发送了应用程序目标构建设置。剩下的就是配置框架目标的安装目录了。

如果您没有自己构建框架,您应该能够通过更改框架安装路径来解决此问题,以便相对于加载器(您的应用程序)定义它,例如:@loader_path/../Frameworks/(或@987654326 @)。您可以通过install_name_tool 来做到这一点。

如果您自己编译私有框架,您可以在 Xcode 构建设置中定义其安装位置。

【讨论】:

  • 是的。这种方法有效。至少我可以让应用程序在部署机器中加载私有框架。但是出现了另一个错误。私有框架链接了几个库(/usr/lib/libiconv.dylib libcurl,...等)。我使用 otool 检查库路径,它显示 /usr/lib/lib*** 我的问题是如何设置这些库的路径?
  • 使用 dylibs,您可以使用 install_name_tool 并指定 @loader_path/../Frameworks/(不是 executable_path)。
猜你喜欢
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
相关资源
最近更新 更多