library
Сами библиотеки, представляют собой набор функций, который может использоваться различными программами. Linux использует два вида библиотек:
- статические - это когда сам софт содержит в себе библиотеки
- динамические - когда библиотеки подгружаются в оперативную память
По умолчанию, библиотеки находятся в двух директориях
/lib
в ней содержатся библиотеки которые используют программы находящиеся в директории/bin
/usr/lib
в ней содержатся библиотеки которые используют программы находящиеся в директории/usr/bin
Пути к библиотекам указаны в файле
cat /etc/ld.so.conf include /etc/ld.so.conf.d/*.conf
Как видим конфигурационные файла с указанием путей к библиотекам хранятся в директории
ls -l /etc/ld.so.conf.d/ итого 12 -rw-rw-r-- 1 root root 38 ноя 24 2014 fakeroot-x86_64-linux-gnu.conf -rw-r--r-- 1 root root 44 янв 27 2016 libc.conf -rw-r--r-- 1 root root 68 апр 15 2016 x86_64-linux-gnu.conf lrwxrwxrwx 1 root root 43 июн 29 2018 x86_64-linux-gnu_EGL.conf -> /etc/alternatives/x86_64-linux-gnu_egl_conf lrwxrwxrwx 1 root root 42 июн 29 2018 x86_64-linux-gnu_GL.conf -> /etc/alternatives/x86_64-linux-gnu_gl_conf
смотрим откуда берет библиотеки libc.conf
cat /etc/ld.so.conf.d/libc.conf # libc default configuration /usr/local/lib
Дополнительное программное обеспечение, которому нужны свои библиотеки не идущие в состав дистрибутива, может создать в этой директории - свой конфигурационный файл.
Для того, чтобы приложение использующее динамические библиотеки могло найти их, используется следующие конфигурационные файлы, находящиеся в директории /etc
ls -l /etc | grep ld.so # Кэш библиотек -rw-r--r-- 1 root root 49970 июн 20 06:21 ld.so.cache # Файл конфигурации, который указывает откуда брать библиотеки -rw-r--r-- 1 root root 34 янв 27 2016 ld.so.conf # Директория в которой находятся дополнительные конфигурационные файлы drwxr-xr-x 2 root root 4096 ноя 6 2018 ld.so.conf.d
для обновления кэша используется команда
ldconfig
ldd
Ldd – это инструмент командной строки, который позволяет просматривать зависимости исполняемого файла от общих объектов. Библиотека относится к одному или нескольким предварительно скомпилированным ресурсам, таким как функции, подпрограммы, классы или значения. Каждый из этих ресурсов объединяется для создания библиотек. Для того чтобы посмотреть, какими библиотеками пользуется та или иная программа используем команду ldd
ldd /bin/cat linux-vdso.so.1 => (0x00007ffe6f124000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe8e9c80000) /lib64/ld-linux-x86-64.so.2 (0x00007fe8ea04a000)
У ldd есть следующие параметры:
-v
– Болтливый режим.-u
– показывает неиспользуемые прямые зависимости-d
– выполняет перемещение данных и показывает отсутствующие объекты ELF.-r
– выполняет перемещение данных и функций и показывает отсутствующие объекты и функции ELF.
<WRAP center round tip 99%>
Nota Bene!
Ldd работает только с динамическими исполняемыми файлами. Если его использовать для статического исполняемого файла, получим ошибку:
not a dynamic executable
</WRAP>
Если по каким-то причинам, нужно в ручную указать путь к исполняемым файлам библиотек, для этого используем специальную переменную среды
# так export LD_LIBRARY_PATH=/your/custom/path_1:/your/custom/path_2 # или так export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/custom/path/ # также сразу можем добавить в ~/.bashrc echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/custom/path/' >> ~/.bashrc
Либо в директории /etc/ld.so.conf.d создать файл конфигурации, и в нем указать путь к библиотекам
vim /etc/ld.so.conf.d/NewLibs.conf /home/linux/myLocalLibs # После сохранения файла, обязательно выполним ldconfig