我想将一些库分发到我的OS X应用程序捆绑包中,最近两天我正在为此工作,但未能成功。直到现在我所做的。
使用安装名称工具时,我具有固定的库路径。另外及时地我尝试了@loader_path /../ Libraries和@executable_path /../ Libraries。
otool -L libMagickWand-6.Q16.2.dylib
@rpath/../Libraries/libMagickWand-6.Q16.2.dylib (compatibility version 3.0.0, current version 3.0.0)
@rpath/../Libraries/libMagickCore-6.Q16.2.dylib (compatibility version 3.0.0, current version 3.0.0)
@rpath/../Libraries/libfreetype.6.dylib (compatibility version 18.0.0, current version 18.2.0)
@rpath/../Libraries/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.5)
@rpath/../Libraries/libz.1.2.5.dylib (compatibility version 1.0.0, current version 1.2.5)
@rpath/../Libraries/libltdl.7.dylib (compatibility version 11.0.0, current version 11.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
在项目目标/构建阶段/添加新的构建阶段/添加复制文件构建阶段中,并将所有动态库复制到我的应用程序包中。
效果很好,我可以看到这些库位于应用程序捆绑包中。
然后将@rpath /../ Libraries /添加到构建设置/运行路径搜索路径
但仍然收到错误消息。
ld:-lMagickWand-6.Q16.2 clang找不到库:错误:链接器
命令失败,退出代码为1(使用-v查看调用)
如果我添加直接路径,可以说库位于构建设置中的“库用户搜索路径”中的/ User / username / libs /中。
我想念什么吗?
最佳答案
Content/Libraries
不是应用程序捆绑包中的标准目录;请改用Content/Frameworks
(该目录中允许.dylib
与.framework
相同)。
将每个库的安装名称设置为@rpath/libWhatever.dylib
,并将可执行文件的运行路径搜索路径(在Contents/MacOS
中)设置为@loader_path/../Frameworks
。
对于库相互依赖关系,那么运行路径搜索路径仅需为@loader_path
,这样就可以从同一目录中加载依赖库。
关于objective-c - Xcode 5如何从App Bundle链接动态库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23712201/