【问题标题】:Xcode 4, dylib & install_name_toolXcode 4、dylib 和 install_name_tool
【发布时间】:2012-05-08 23:20:12
【问题描述】:

我正在尝试让 dylib 在我的 OSX 项目中工作。

我已经阅读了一些示例,特别是以下示例: Xcode 4 adding dylib

但我仍然无法让它工作。

以下是我执行的步骤:

  1. 将 testing.1.dylib 复制到我的 Xcode 项目文件夹中。
  2. sudo install_name_tool -id @executable_path/../Frameworks/testing.1.dylib testing.1.dylib
  3. 跑:otool -L testing.1.dylib 并收到以下信息:

    testing.1.dylib:
    @executable_path/../Frameworks/testing.1.dylib(兼容版本 2.0.0,当前版本 2.0.0)
    /usr/lib/libSystem.B.dylib(兼容版本1.0.0,当前版本159.1.0)

  4. testing.1.dylib 作为框架添加到项目中。 (使用带有库选项的链接包)。

  5. 此时我编译 testing1.dylib 并没有像我预期的那样被复制到 .App/Framework 中,所以我手动创建了 Framework 路径并将 testing.1.dylib 复制到其中: a) mkdir -p testing.app/Contents/Frameworks b) cp testing.1.dylib testing.app/Contents/Frameworks
  6. 在 Xcode 中,我将目标和项目的 Runtime Search Paths 更新为:@executable_path/../Frameworks。

现在我将 testing.app 复制到另一台新安装的机器上并尝试运行它。我收到以下错误:

dyld:库未加载:/user/local/lib/testing1.dylib 引用自:/Users/me/testing.app/MacOS/./testing 原因:找不到图片

我错过了什么?

注意:运行 install_name_tool 时,需要使用 sudo 否则会出现以下错误:

install_name_tool:无法打开输入文件:testing.1.dylib 进行写入(权限被拒绝) install_name_tool: can't lseek to offset: 0 in file: testing.1.dylib for writing(错误的文件描述符) install_name_tool:无法在文件中写入新标头:testing.1.dylib(错误的文件描述符) install_name_tool:无法关闭写入输入文件:testing.1.dylib(错误文件描述符)

【问题讨论】:

  • otool -L the_executable_itself 给出了什么?

标签: macos xcode4 dylib otool install-name-tool


【解决方案1】:

您不需要将库复制到项目中。

您不需要使用sudo 来更改您拥有的文件的安装名称。您不拥有库文件吗?也许您对某个第三方项目进行了“sudo make install”?只是不要安装它并链接到构建目录中的那个。如果您正在构建这个库,那么您应该在构建它时使用链接命令的命令行选项设置它的安装名称。

预计将库添加到目标会导致它被链接,但不会自动导致它被复制。您也可以创建一个 Copy Files 构建阶段并将库添加到该阶段。

除非您使用基于@rpath 的安装名称,否则您无需设置运行路径搜索路径。

我怀疑 Xcode 实际上是链接到您在第 1 步中复制的库,而不是您制作的副本以及您随后修改的安装名称。构建记录中的实际链接命令是什么意思?您在步骤 1 中从哪里复制库?如果它来自 /usr/lib 或 /usr/local/lib,那么 Xcode 可能会链接到它。

【讨论】:

    【解决方案2】:

    在您引用的“XCode 4 添加 dylib”问题中,答案似乎是设置“复制文件”构建阶段。这非常简单,因为您的 dylib 中已经有了 write 可执行路径。现在只需转到您的目标设置 > 构建阶段 > 添加构建阶段 > 复制文件。然后将 dylib 从 Navigator 侧边栏拖到文件中,并将目标设置为 Frameworks。

    这应该将 dylib 捆绑到您的应用程序包内容中,并且 dylib 中的可执行路径应该指向正确的东西。

    【讨论】:

      猜你喜欢
      • 2011-10-11
      • 2012-11-09
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 2016-03-03
      相关资源
      最近更新 更多