Xcode 4,dylib&install_name_tool

问题描述 投票:3回答:2

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

我一直在阅读一些样本,这个样本专门:Xcode 4 adding dylib

但是我仍然无法使其正常工作。

这是我执行的步骤:

  1. 将testing.1.dylib复制到我的Xcode项目文件夹中。
  2. Ran 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. 此时,编译testing1.dylib并没有像预期的那样被复制到.App / Framework中,因此我手动创建了Framework路径并将testing.1.dylib复制到其中:a)mkdir -p testing.app/Contents/Frameworksb)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:无法偏移:文件中的0:testing.1.dylib用于写入(错误的文件描述符)install_name_tool:无法在文件:testing.1.dylib(错误的文件描述符)中写入新头install_name_tool:无法关闭写在输入文件上的文件:testing.1.dylib(错误文件描述符)

macos xcode4 dylib otool install-name-tool
2个回答
1
投票

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

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

预计将库添加到目标会导致链接,但不会自动导致将其复制。您可以创建“复制文件”构建阶段,也可以在其中添加库。

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

我怀疑Xcode实际上是链接到您在步骤1中复制了[[from的库,而不是您复制的副本,然后修改了其安装名称。构建记录中的实际链接命令说什么?您从第1步从哪里复制库?如果它来自/ usr / lib或/ usr / local / lib,则Xcode可能与此相对。


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

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

© www.soinside.com 2019 - 2024. All rights reserved.