我想将一些库分发到我的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/

10-10 20:32