Последнее изменение текста: 20010201
Скопировано с www.bog.pp.ru: 2024.11.23
Bog BOS: Shared library
PIC - position-independent code
Linux
/lib/ld.so (он же /lib/ld.so.1.9.5, для a.out) и /lib/ld-linux.so.2 (он
же /lib/ld-2.1.3.so, для ELF) - динамический загрузчик и линкер. Все исполняемые
программы (если не использовать явно "ld -static") получаются "недоделанными"
и требуют связывания во время выполнения. Поиск необходимой библиотеки
ведется:
-
по списку директорий из LD_LIBRARY_PATH (если не установлен setuid/setgid)
-
в кеше (/etc/ld.so.cache)
-
/usr/lib
-
/lib
/sbin/ldconfig - создает символьные ссылки и кеш (/etc/ld.so.cache)
для динамического загрузчика и линкера (просматриваются директории, указанные
в командной строке, в /etc/ld.so.conf, /usr/lib, /lib). Опции:
-
-D (отладка)
-
-v
-
-n (обрабатывать только директории, указанные в командной строке)
-
-N (не изменять кеш)
-
-X (не изменять ссылки)
-
-p (показать, что в кеше)
/etc/ld.so.conf - список, директорий (и еще в /usr/lib, /lib) в
которых ldconfig ищет разделяемые библиотеки (почему бы не добавить туда
/usr/local/lib и не запустить ldconfig)
ldd -v (выдает список разделяемых библиотек, требуемых указанной
программе)
libtool - упрощение построения разделяемых библиотек.
-
Объектные файлы, предназначаемые для включения в разделяемую библиотеку
имеют суффикс ".lo" вместо ".o". Для компиляции оного ставится libtool
перед gcc.
-
Библиотеки, предназначенные для включения в разделяемую библиотеку имеют
суффикс ".la" вместо ".a". Сборка делается так: "libtool gcc ... -o ....la
список-lo-файлов -rpath где-будет-лежать-библиотека -lиспользуемая-библиотека".
-
Если получившаяся библиотека установлена в указанную директорию, то сборка
программ происходит как обычно (указывая -L и -l; без использования libtool).
Директория должна быть в списке поиска библиотек (LD_LIBRARY_PATH, кеш).
Если при сборке программы поставить libtool перед gcc, то он поможет собрать
программу так, что не надо будет об этом беспокоиться (правда, при этом
реальная программа создается в поддиректории .libs, а в текущей директории
создается скрипт на sh для ее правильного вызова; если разделяемая библиотека
установлена в предназначенную ей директорию, то программу можно запускать
напрямую).
-
Запуск отладчика: libtool gdb программа.
-
Установка библиотеки: libtool install ...la ...
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru