Я компилирую простую программу C на Mac m2, которая зависит от общей библиотеки, используя clang в macOS. Я правильно устанавливаю путь rpath, используя флаг -Wl,-rpath,@executable_path/../saga. Я проверил это, проверив исполняемый файл с помощью otool, который показывает правильный путь rpath.
Однако когда я пытаюсь запустить программу, динамический компоновщик (dyld) не находит библиотеку по указанному пути. Программа работает только тогда, когда я устанавливаю переменную среды DYLD_LIBRARY_PATH в место, где находится библиотека (libdynamiclib.dylib).
Почему dyld не использует заданный мной путь? Я неправильно устанавливаю путь?
Вот команда, которую я использую для компиляции программы:
clang -I../saga -L../saga -ldynamiclib -Wl,-rpath,@executable_path/../saga -o main main.c





Rpath имеет значение только для поисков, которые на самом деле используют @rpath, но похоже, что ваша библиотека этого не делает. Его установочное имя — просто libdynamiclib.dylib, но оно должно быть @rpath/libdynamiclib.dylib.
Запустите это, затем перекомпилируйте основной двоичный файл:
install_name_tool -id '@rpath/libdynamiclib.dylib' ../saga/libdynamiclib.dylib
codesign -s - -f -o linker-signed ../saga/libdynamiclib.dylib
(Вторая команда предназначена просто для обновления подписи, созданной компоновщиком по умолчанию. Если у вас есть собственный процесс разработки кода, то, очевидно, просто используйте ее.)
А если вы хотите подробнее узнать, как работают имена установок, см. мой пост.
Огромное тебе спасибо, чувак! Я с утра ломаю голову над этим вопросом. Ты мой герой!