我看了几个相关的问题,似乎无法为自己找到解决方案。
基本上我在我的Xcode项目中使用了libmp3lame.dylib。 lame的安装过程产生.dylib并将其放在usr / local / lib中并让Xcode构建并运行项目我更改了Library Search Paths以包含上面的文件夹。这很好。
现在要生成一个发布版本,我想在包中包含.dylib,这样用户就不必忍受安装阶段或类似的东西了。我创建了目标的复制文件阶段,这会将.dylib转储到bundle的内容中的Frameworks文件夹中。但是,在二进制文件上运行otool显示,而不是在bundle中使用.dylib,编译器已将其链接到usr / local / lib版本(即使我删除了该版本)。
查看otool输出中的其他结果我有其他框架链接到bundle内部,而不是.dylib。查看这些框架的属性和Xcode中的.dylib,我看不到除文件类型之外的任何差异。
我的搜索建议我需要使用rpath或类似的,但我不知道在Xcode中应用它的位置。
答案 0 :(得分:2)
我对此问题的解决方法是在终端中执行以下操作(我已经使用Automator,以及自动执行此操作):
install_name_tool -id @executable_path/../Frameworks/libmp3lame.0.0.0.dylib ~/path/to/lib/in/app/libmp3lame.0.0.0.dylib
install_name_tool -change /usr/local/lib/libmp3lame.0.dylib @executable_path/../Frameworks/libmp3lame.0.0.0.dylib ~/path/to/app/Contents/MacOS/AppName
基本上将库中的路径从usr本地库中的路径交换到包中包含的路径。
答案 1 :(得分:0)
我的建议是查看构建输出,它实际上是如何运行ld的?