Предполагая, что я хочу проверить, установлена ли библиотека и может ли она использоваться программой. Я могу использовать, ldconfig -p | grep mylib
чтобы узнать, установлен ли он в системе. но что если библиотека известна только через настройки LD_LIBRARY_PATH
?
В этом случае программа может найти библиотеку, но ldconfig
не сможет. Как я могу проверить, находится ли библиотека в комбинированном пути компоновщика?
Я добавлю , что я ищу решение , которое будет работать , даже если я не на самом деле есть программа под рукой (например , программа еще не компилируется), я просто хочу знать , что определенная библиотека существует в ld
' с пути.
linux
dynamic-linking
ld
nbubis
источник
источник
ldd <binary>
чтобы проверить, все ли связанные библиотеки находятся в пути. Может быть, есть более элегантный способ.ldd
служит именно этой цели.LIBRARY_PATH
переменную окружения, которая ищется, например,gcc
компилятором.LIBRARY_PATH
Переменная среды также имеет двоеточие отделено список каталогов.Ответы:
ldconfig
может перечислить все библиотеки, к которым у него есть доступ. Эти библиотеки также хранятся в его кеше./sbin/ldconfig -v -N
будет сканировать все обычные пути к библиотекам, перечислять все доступные библиотеки, не восстанавливая кеш (что невозможно, если вы не являетесь пользователем root). Он НЕ учитывает библиотеки в LD_LIBRARY_PATH (в отличие от того, что было сказано в этом посте перед редактированием), но вы можете передать дополнительные библиотеки в командную строку, используя следующую строку:источник
ldconfig
он не переносим, поскольку он применяется только к реализациям, основанным наa.out
динамическом компоновщике на основе SunOS-4.0 с 1987 года./sbin/ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH)
не слишком излишнее по моему вкусу.ldconfig
в соглашении с AT & T, поскольку кэширование компоновщика было слишком чувствительным к ошибкам. ВС позже добавилthe tree stooges
:moe
,lari
а вcrle
качестве вспомогательных программ для управления ELF.Глобально заменить (пробел) на
:
LD_LIBRARY_PATHисточник
Вы можете скомпилировать простую тестовую программу с помощью gcc и связать свою библиотеку. Затем вы можете проверить используемые библиотеки с помощью ldd. Я использую что-то вроде этого:
-Wl,--no-as-needed
запрещает компоновщику отбрасывать библиотеку, поскольку символы из библиотеки не используются.источник