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

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

[email protected]:~$ 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, который содержит команду load, используя путь @loader_path. Таким образом, в каждом двоичном файле путь @loader_path переходит на другой путь

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

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

Ответ 1

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

Путь @loader_path полезен для фреймворков и плагинов, но не для автономных библиотек.