XCode 4,dylib& install_name_tool

时间:2012-04-28 12:57:45

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

我正在尝试在我的OSX项目中使用dylib。

我一直在阅读一些样本,具体如下: 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. Ran: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. 此时我编译的test1.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。
  7. 现在我将testing.app复制到一个单独的新安装的机器上并尝试运行它。我得到以下错误:

    dyld:未加载库:/user/local/lib/testing1.dylib   参考:/Users/me/testing.app/MacOS/./testing   原因:未找到图像

    我错过了什么,但我不确定是什么?有人能指出我正确的方向吗?

    注意:运行install_name_tool时,我需要使用sudo或者出现以下错误:

    install_name_tool:无法打开输入文件:testing.1.dylib进行写入(Permission denied) install_name_tool:不能lseek偏移:文件中的0:testing.1.dylib用于写入(错误的文件描述符) install_name_tool:无法在文件中写入新标头:testing.1.dylib(错误的文件描述符) install_name_tool:无法关闭写入输入文件:testing.1.dylib(错误的文件描述符)

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:1)

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

这应该将dylib捆绑到你的app包内容,而dylib中的可执行路径应该指向正确的东西。