Xcode 4,dylib和install_name_tool

3
我正在尝试在我的OSX项目中使用dylib。
我已经阅读了一些示例,特别是这个: Xcode 4添加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: Library not loaded: /user/local/lib/testing1.dylib Referenced from: /Users/me/testing.app/MacOS/./testing Reason: image not found
我错过了什么?
注:运行install_name_tool时,我需要使用sudo,否则会出现以下错误:
install_name_tool: can't open input file: testing.1.dylib for writing (Permission denied) install_name_tool: can't lseek to offset: 0 in file: testing.1.dylib for writing (Bad file descriptor) install_name_tool: can't write new headers in file: testing.1.dylib (Bad file descriptor) install_name_tool: can't close written on input file: testing.1.dylib (Bad file descriptor)

otool -L 命令会返回可执行文件的什么信息? - Vassilis
2个回答

1
在您引用的“XCode 4添加dylib”问题中,答案似乎是设置“复制文件”构建阶段。这很简单,因为您已经在dylib中有正确的可执行路径。现在只需转到目标设置 > 构建阶段 > 添加构建阶段 > 复制文件。然后从导航栏侧边栏拖动dylib到文件中,并将目的地设置为框架。

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


1

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

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

添加库到目标后,预计会将其链接但不会自动复制。您可以创建一个复制文件的构建阶段,并将库添加到其中。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接