Я считал некоторое воспрепятствование статей использования DYLD_LIBRARY_PATH, как, путь динамической библиотеки должен быть зафиксирован с помощью-install_name, @rpath, и @loader_path.
С точки зрения создания программы, которая работает и на Linux и на Mac OS X, DYLD_LIBRARY_PATH Mac OS X делает точно что LD_LIBRARY_PATH Linux. И, мы можем совместно использовать (почти) тот же make-файл, который не имеет-install_name и @rpath.
Как вы отметили, DYLD_LIBRARY_PATH
ведет себя как LD_LIBRARY_PATH
на другом * nix. Однако есть еще одна переменная среды, на которую вам следует обратить внимание, она называется DYLD_FALLBACK_LIBRARY_PATH
.
В общем, они (как для OSX, так и для Linux) предлагаются только для использования в разработке, поскольку они могут вызывать ошибки поиска символов, когда вы переопределяете библиотеку, у которой нет такой же таблицы символов. Хорошим примером этого является попытка переопределить установку VecLib по умолчанию (например, blas lapack) с помощью специальной установки. Это вызовет ошибки "не найден символ" в приложениях, связанных с системной VecLib, если DYLD_LIBRARY_PATH
установлен, и наоборот (ошибки поиска символа в пользовательских приложениях), если это не так. Это связано с тем, что система blas / lapack не является полной реализацией библиотек ATLAS.
DYLD_FALLBACK_LIBRARY_PATH
не вызовет этих проблем.
При установке библиотек в нестандартное место, DYLD_FALLBACK_LIBRARY_PATH
гораздо более разумно. Это будет искать символы в библиотеках, указанных в путях по умолчанию, и, если символ там не найден, возвращается к указанному пути.
Преимущество заключается в том, что этот процесс не вызывает ошибок поиска символов в приложениях, скомпилированных с использованием библиотек по умолчанию.
Обычно, когда библиотеки устанавливаются в нестандартные места, следует указывать абсолютные пути, что устраняет неоднозначность динамического поиска.