我正在尝试在我的OSX项目中使用dylib。
我一直在阅读一些样本,具体如下: XCode 4 adding dylib
但我仍然无法让它发挥作用。
以下是我执行的步骤:
sudo install_name_tool -id @executable_path/../Frameworks/testing.1.dylib testing.1.dylib
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)
将testing.1.dylib
添加为项目的框架。 (使用带库选项的链接包)。
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进行写入(Permission denied) install_name_tool:不能lseek偏移:文件中的0:testing.1.dylib用于写入(错误的文件描述符) install_name_tool:无法在文件中写入新标头:testing.1.dylib(错误的文件描述符) install_name_tool:无法关闭写入输入文件:testing.1.dylib(错误的文件描述符)
答案 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中的可执行路径应该指向正确的东西。