我在 OS X 上构建了一个始终无法加载的可执行文件(名为 demux),但我找不到原因:
$ ./demux
RPATH failed to expanding @rpath/sfeMovie.framework/Versions/2.0/sfeMovie to: @executable_path/sfeMovie.framework/Versions/2.0/sfeMovie
dyld: Library not loaded: @rpath/sfeMovie.framework/Versions/2.0/sfeMovie
Referenced from: …current_dir/./demux
该框架位于可执行文件旁边。Otool 显示以下内容:
$ otool -L sfeMovie.framework/Versions/2.0/sfeMovie
sfeMovie.framework/Versions/2.0/sfeMovie:
@rpath/sfeMovie.framework/Versions/2.0/sfeMovie (compatibility version 2.0.0, current version 2.0.0)
和:
$ otool -L demux
demux:
@rpath/sfeMovie.framework/Versions/2.0/sfeMovie (compatibility version 2.0.0, current version 2.0.0)
鉴于此,我认为将@executable_path 添加到可执行文件的运行时搜索路径将允许它查看相对安装名称仅以@rpath 为前缀的任何框架和库(如@rpath/sfeMovie.framework/...)和它位于可执行文件旁边。确保此运行时搜索路径正确:
$ otool -l demux | grep LC_RPATH -A 2
cmd LC_RPATH
cmdsize 32
path @executable_path (offset 12)
但这失败了,我不知道为什么。对我来说,@executable_path/sfeMovie.framework/Versions/2.0/sfeMovie 看起来是正确的路径,但它仍然失败……是否滥用了 @rpath 或 @executable_path?