在我的Xcode项目中,我构建了几个动态库,它们的前缀为“ @ rpath / lib”。我添加了一个包括这些dylib的“复制文件”构建阶段。它们被安装到Frameworks中名为lib的文件夹中。我还将运行路径搜索路径设置为“ @loader_path /../ Frameworks”,当可执行文件运行时,应将其替换为@rpath。 DLYD查看我的二进制文件的运行路径,我在二进制文件上使用工具-l命令对其进行了检查。这将产生:
Load command 47
cmd LC_RPATH
cmdsize 40
path @loader_path/../Frameworks (offset 12)
所以我假设当我的二进制文件运行时,DLYD将通过MACH-O二进制文件解析lib文件夹的路径。
运行项目时,我使用活动监视器检查二进制文件打开的文件。我看不到动态库是从它们所在的@loaderpath /../ Frameworks / lib引用的,而是看到它们是从/ usr / local / lib引用的。
我应该设置哪些Xcode设置以便正确找到我的动态库?我使用了用户定义的构建设置'DYLD_PRINT_BINDINGS'来查看正在链接的内容,即使最终针对/ usr / local / lib中的库进行链接,我也看不到我的库被链接
答案 0 :(得分:1)
我发现我开发了一段时间的脚本,我曾经将.dylib
复制到.app
的{{1}}目录中并检测了相关库,并使用{ {1}}。应该将其设置为构建后脚本。
https://github.com/trojanfoe/xcodedevtools/blob/master/copy_dylibs.py
我已经有一段时间没有对其进行测试了。根据我的this question,该回购还包含我现在用来突出内部版本的脚本。