我的问题是关于在 Xcode 中设置@rpath。
我为 C/C++ 构建了独立的 Tensorflow 2 库,以便将它们与在 OSX 10.4.5 上运行的 Xcode 10 一起使用。在 Xcode 中,我设置了 Header Search Paths、Library Search Paths 和 Runpath Search Paths,这些路径是创建的 lib 和 include 目录所在的位置。还将创建的库添加到 Link Binary With Libraries。测试程序构建良好,但出现运行时错误:
dyld:未加载库:@rpath/libtensorflow_cc.so.1
我用的是MacDependency工具检查 libtensorflow_cc.so 库,它突出显示了同样的问题:
错误:无法打开文件‘@rpath/libtensorflow_framework.1.dylib’。
然后我通过在命令行运行这个来调查@rpath 的内容:
otool -l libtensorflow_framework.so
并得到以下内容:
cmd LC_ID_DYLIB
cmdsize 64
name @rpath/libtensorflow_framework.so.1 (offset 24)
cmd LC_RPATH
cmdsize 32
path @loader_path/ (offset 12)
LC_RPATH 似乎表明@rpath 为空(??)。
我发现有几条建议在命令行中使用 install_name_tool 来修改 @rpath。但我想用 Xcode 来做这件事仅有的如果可能的话,因为坦率地说不能这样做是没有意义的。
所以我的问题分为两部分:
- 为什么在 Xcode 中设置 Runpath Search Paths 时运行时 @rpath 似乎未正确设置?它们是否不同?如果不同,那么原因是什么?
- 是否可以在 Xcode 的某处设置正确的运行时 rpath 并避免使用 install_name_tool?
我发现了一个类似的问题,已经自我回答但对我来说不起作用,因为在 Xcode 中我的运行路径搜索路径定义已经包括调试和发布。