Я создал исполняемый файл (названный демультиплексором) в OS X, который всегда не загружается, и я не могу понять, почему:
$ ./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?