Это в порядке для использования DYLD_LIBRARY_PATH на Mac OS X? И, каков динамический алгоритм поиска библиотеки с ним?

Я считал некоторое воспрепятствование статей использования 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 на Mac OS X?
  • Каков динамический алгоритм поиска библиотеки с Mac OS X, когда двоичный файл не может найти динамическую библиотеку? текущий каталог-> каталоги DYLD_LIBRARY_PATH...?
51
задан prosseek 30 June 2010 в 02:40
поделиться

1 ответ

Как вы отметили, 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 гораздо более разумно. Это будет искать символы в библиотеках, указанных в путях по умолчанию, и, если символ там не найден, возвращается к указанному пути.

Преимущество заключается в том, что этот процесс не вызывает ошибок поиска символов в приложениях, скомпилированных с использованием библиотек по умолчанию.

Обычно, когда библиотеки устанавливаются в нестандартные места, следует указывать абсолютные пути, что устраняет неоднозначность динамического поиска.

67
ответ дан 7 November 2019 в 10:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: