Какой путь разрешает @loader_path?

Мне трудно понять абсолютный путь, по которому @loader_path внутри файла относится к.

user@local:~$ otool -L zlib.so 
zlib.so:
    @loader_path/../../libz.1.dylib (compatibility version 1.0.0, current version 1.2.7)
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)

Я хочу знать, где система ищет libz.1.dylib.

Из некоторой документации Mac:

@loader_path / Эта переменная заменяется путем к каталогу, содержащему двоичный файл mach-o, который содержит команду загрузки с использованием @loader_path. Таким образом, в каждом двоичном файле @loader_path разрешается по другому пути

Я бы догадался, что это означает, что @loader_path - это просто путь к объектному файлу (zlib.so), но это не похоже на правду.

Существует ли какая-либо утилита командной строки, которая преобразует @loader_path в фактический путь, который используется при попытке открыть библиотеку?

2 ответа

Решение

Ваше предположение верно: в этом случае @loader_path - это путь к каталогу, содержащему zlib.so. Но, вероятно, будут проблемы с использованием этой библиотеки. Где ты взял эту библиотеку? Если вы создаете его самостоятельно, см. Этот вопрос для получения дополнительной информации.
@Loader_path полезен для фреймворков и плагинов, но не для автономных библиотек.

Путь @loader будет заменен текущим двоичным путем

      install_name_tool -add_rpath "@loader_path/Gstreamer/Versions/Current/lib binfile(binary to which you want to link the dylibs)
Другие вопросы по тегам