1

我查看了一些相关问题,似乎无法为自己找到解决方案。

基本上我在我的 Xcode 项目中使用 libmp3lame.dylib。lame 的安装过程生成了 .dylib 并将其放在 usr/local/lib 中,为了让 Xcode 构建和运行项目,我更改了库搜索路径以包含上述文件夹。这工作正常。

现在它要生产一个发布版本,我想在包中包含 .dylib,这样用户就不必忍受安装阶段或类似的东西。我创建了目标的复制文件阶段,这会将 .dylib 转储到包内容中的 Frameworks 文件夹中。但是,在二进制文件上运行 otool 表明编译器没有使用包中的 .dylib ,而是将其链接到 usr/local/lib 版本(即使我删除了该版本)。

查看 otool 输出中的其他结果,我在包中链接了其他框架,而不是 .dylib。查看这些框架和 Xcode 中的 .dylib 的属性,除了文件类型之外,我看不到任何差异。

我的搜索表明我需要使用 rpath 或类似的,但我不知道在 Xcode 中的何处应用它。

4

2 回答 2

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 本地库中的路径交换到捆绑包中包含的路径。

于 2011-11-08T13:39:24.883 回答
0

我的建议是查看构建输出,它实际上是如何运行 ld 的?

于 2010-08-25T09:39:15.400 回答