Разделяемая библиотека HOWTO объясняет большинство механизмов , вовлеченных, и динамический загрузчик руководство переходит в более подробно. Каждый вариант Unix имеет свой собственный путь, но большинство использует один и тот же исполняемый формат ( ELF ) и имеют похожие динамические компоновщики (производные от Solaris). Ниже я обобщу общее поведение с акцентом на Linux; проверьте руководства вашей системы для полной истории.
Короче говоря, когда он ищет динамическую библиотеку ( .so
файл), компоновщик пытается:
- каталоги, перечисленные в
LD_LIBRARY_PATH
переменной среды ( DYLD_LIBRARY_PATH
в OSX);
- каталоги, перечисленные в rpath исполняемого файла ;
- каталоги в системном поисковом пути, который (по крайней мере в Linux) состоит из записей в
/etc/ld.so.conf
плюс /lib
и /usr/lib
.
Rpath хранится в исполняемом файле (это динамический атрибут DT_RPATH
или DT_RUNPATH
). Он может содержать абсолютные пути или пути, начинающиеся с того, $ORIGIN
чтобы указывать путь относительно местоположения исполняемого файла (например, если исполняемый файл находится в, /opt/myapp/bin
а его rpath равен, $ORIGIN/../lib:$ORIGIN/../plugins
то динамический компоновщик будет искать /opt/myapp/lib
и /opt/myapp/plugins
). Rpath обычно определяется, когда исполняемый файл компилируется, с -rpath
опцией ld
, но впоследствии вы можете изменить ее с помощью chrpath
.
В сценарии вы описали, если вы разработчик или упаковщик приложения и предназначаются для того , чтобы установить в …/bin
, …/lib
структуре, а затем связать с -rpath='$ORIGIN/../lib'
. Если вы устанавливаете предварительно собранный двоичный файл в своей системе, либо поместите библиотеку в каталог на пути поиска ( /usr/local/lib
если вы системный администратор, в противном случае - каталог, который вы добавляете $LD_LIBRARY_PATH
), либо попробуйте chrpath
.
/lib64
и/usr/lib64
используются для 64-разрядных двоичных файлов и/lib
и/usr/lib
используются для 32-разрядных двоичных файлов.ldconfig
.ldconfig
ввязывается при установке библиотеки.*.so
библиотек не совпадает с$PATH
. Путь поиска указан @enzotib в их ответе. Чтобы распечатать пути, которые будут искать, запуститеldconfig -v 2>/dev/null | grep -v ^$'\t'
./sbin/ldconfig
и другая магия Эндрю Бэйта, чтобы заставить его работать без полномочий rootВ Linux поведение объясняется в
ld(1)
справочной страницеисточник
Я уверен , что ответ здесь
ldconfig
.http://linux.die.net/man/8/ldconfig
источник
Для запуска приложений файл
/proc/1234/maps
содержит все актуальные динамически связанные библиотеки.Где
1234
pid запущенного исполняемого файла.Linux следует LD_LIBRARY_PATH и другим переменным, как указано в ответе Жиля.
источник