Ответ 1
Используйте относительные пути в вашем dylib, используя install_name_tool. Таким образом, вы можете установить их один раз и установить этот каталог в любом месте без необходимости изменять свои библиотеки во время установки.
Вы должны поместить все ваши зависимости dylib в одну папку, а затем использовать install_name_tool, чтобы установить относительное расположение других dylib, на которых вы зависите. Предположим, ваша библиотека libmyfoo.dylib зависит от libbar.dylib:
install_name_tool -change "/Whatever/full/path/libbar.dylib" "@loader_path/libbar.dylib" libmyfoo.dylib
Таким образом, ваша библиотека всегда будет искать libbar.dylib в том же каталоге, где находится libmyfoo.dylib.
Вам также может потребоваться запустить install_name_tool для некоторых других dylib, если они зависят друг от друга.
Опасайтесь, документация для install_name_tool указывает, что "для этого инструмента работать, когда имена установки или rpaths больше, двоичный должен быть построен с параметром ld (1) -headerpad_max_install_names.", поэтому обязательно добавляйте параметр командной строки -headerpad_max_install_names
при создании вашей библиотеки.
@loader_path
относится к двоичному файлу, используемому для загрузки dylib, в этом случае ваш libmyfoo.dylib. Используйте @executable_path
, если вы хотите найти библиотеки относительно исполняемого файла, которые начали последовательность загрузки библиотеки.