我正在尝试在我的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用于写入(权限被拒绝)install_name_tool:无法偏移:文件中的0:testing.1.dylib用于写入(错误的文件描述符)install_name_tool:无法在文件:testing.1.dylib(错误的文件描述符)中写入新头install_name_tool:无法关闭写在输入文件上的文件:testing.1.dylib(错误文件描述符)
您不需要将库复制到项目中。
您不需要使用sudo
来更改您拥有的文件的安装名称。您不拥有该库文件吗?也许您在某些第三方项目上做了“ sudo make install”?只是不要安装它并链接到构建目录中的一个。如果要构建此库,则在使用链接命令的命令行选项构建它时,应设置其安装名称。
预计将库添加到目标会导致链接,但不会自动导致将其复制。您可以创建“复制文件”构建阶段,也可以在其中添加库。
除非您使用基于@rpath
的安装名称,否则您无需设置运行路径搜索路径。
我怀疑Xcode实际上是链接到您在步骤1中复制了[[from的库,而不是您复制的副本,然后修改了其安装名称。构建记录中的实际链接命令说什么?您从第1步从哪里复制库?如果它来自/ usr / lib或/ usr / local / lib,则Xcode可能与此相对。
这会将dylib捆绑到您的应用程序包内容中,并且dylib中的可执行路径应指向正确的东西。