- ИТ База знаний
- Полезно
- Навигация
- Серверные решения
- Телефония
- Корпоративные сети
- Управление библиотеками в Linux
- Linux как добавить библиотеку
- Linux как добавить библиотеку
- Содержание
- Библиотеки из основного репозитория
- Библиотека glbinding
- Библиотека anax
- Библиотека nlohmann-json
- Установка последней версии cmake
- Установка последней версии clang
- Используем clang по всей системе
ИТ База знаний
Курс по Asterisk
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Управление библиотеками в Linux
Когда библиотекарь — пингвин
4 минуты чтения
В данной статье мы посмотрим, что такое статические и динамические библиотеки. Местоположение библиотек по умолчанию. Определение используемых библиотек. Загрузка библиотек.
Мини — курс по виртуализации
Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена
Библиотеки это набор функций, которые могут использоваться в различных программах. Библиотеки могут быть статические (библиотека привязывается к определенной программе или софт содержит данную библиотеку в своем теле.) и динамическими (библиотеки грузятся в оперативную память и используются). Плюсы первого варианта нет проблемы совместимости, т. к. софт уже в себе содержит библиотеку, библиотека всегда с собой. Но при этом программы становятся большие по размеры и т.к каждая может загружать свои библиотеки, а иногда и одинаковые. Второй вариант значительно лучше, сами программы по своему размеру меньше. Библиотека загружается один раз в оперативку. И следующая программа, которой необходимы такие же функции, берет и использует эти данные.
По умолчанию библиотеки в Linux находятся в двух папках. Это корневая папка /lib в ней находятся библиотеки, которые используют программы, расположенные в корневой папке /bin.
И есть вторая папка /usr/lib. В ней находятся библиотеки, которые используют программы расположенные /usr/bin. Пути к библиотекам указаны файле /etc/ld.so.conf. Данный файл можно просмотреть стандартным способом, через утилиту cat.
Видим, что написано включить все библиотеки, которые расположены по пути, указанном в файле. Те которые оканчиваются на .conf. Он просто включает в себя все настройки, которые находятся в конфигурационных файлах, в данной директории. Переходим в данную директорию.
В данной директории мы можем видеть 2 файла конфигурации, в зависимости от версии и наполнения операционной системы их может быть и больше. Ну и соответственно в конфигурационных файлах находятся пути к директориям, где лежат необходимые для работы библиотеки. Если мы ставим какое, то свое программное обеспечение, которому необходимы дополнительные библиотеки, не идущие в составе дистрибутива linux, то в данной директории может создаться свой конфигурационный файл. Например: если мы используем систему виртуализации VMware, то к каждой VM устанавливаем VMware tools то данное программное обеспечение создаст свой конфигурационный файл с путями для своих библиотек.
Переходим в директорию cd /etc/ и отсортируем так, чтобы в результатах все, что содержит ld.
Видим 3 основных конфигурационных файла. ld.so.conf — это файл конфигурации в котором написано откуда брать дополнительные библиотеки. Директория ls.so.conf.d в которой находятся дополнительные конфигурационные файлы и ld.so.cache это кэш библиотек. Он у нас выстраивается каждый раз для того, чтобы программы при необходимости при запросе библиотек не копались в файлах, а сразу брали из загруженного в оперативную память кэша. Т.е. если мы вносим какие-то изменения в файл конфигурации, добавляем какие-то конфигурационные файлы нам необходимо обновить этот кэш. Кэш обновляется командой ldconfig. Этого, собственно, достаточно, чтобы прогрузить все библиотеки в кэш.
Давайте посмотрим, как, определить какими библиотеками пользуется какая программа.
Для этого мы будем использовать команду ldd и путь к бинарному файлу. Например: Программа ls которая используется для вывода списка файлов в каталоге. Она находится в каталоге /bin/ls.
В результате получим мы следующее:
Мы видим, какие so использует данная программа и соответственно ссылки на них, где они расположены, собственно, so — это наши библиотеки в данном случае.
Возможно добавление библиотек вручную, это может потребоваться если мы ставим совершенно стороннее программное обеспечение, которое очень трудно взаимодействует с Linux или устаревшее. Т.е. которое само не может создать конфигурационный файл и разнести библиотеки в системные директории Linux. Если мы хотим сделать это вручную, тогда нам необходим тот самый файл /etc/ld.so.conf. В данный файл мы можем дописать путь к файлу конфигурации библиотек тех, которые нам нужны. Либо есть более легкий вариант с использованием переменной export LD_LIBRARY_PATH и указать путь к тем особенным библиотекам, которые будет использовать наша «особенная» программа. Обычно все стороннее программное обеспечение устанавливается в папку /opt. Итоговый вариант будет выглядеть как: export LD_LIBRARY_PATH=/opt/soft/lib и когда пройдет экспорт, у нас попробует погрузится из этого пути библиотека, но перед этим необходимо не забыть сделать ldconfig.
Мини — курс по виртуализации
Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена
Источник
Linux как добавить библиотеку
Начиная с 3.0-RELEASE, больше нет необходимости указывать options LINUX или options COMPAT_LINUX в Вашем файле конфигурации ядра.
Поддержка Linux приложений осуществляется посредством специального модуля ядра (KLD объекта, «Kernel LoaDable object» ), то есть его можно загрузить/выгрузить «на лету» , без необходимости перезагрузки. Вам потребуется убедиться в наличии следующей строки в файле /etc/rc.conf :
Это, в свою очередь, повлияет на выполнение следующего кода в файле /etc/rc.i386 :
# Start the Linux binary compatibility if requested. # case $
Если Вы хотите проверить, загружен ли модуль, это можно сделать при помощи команды kldstat :
% kldstat Id Refs Address Size Name 1 2 0xc0100000 16bdb8 kernel 7 1 0xc24db000 d000 linux.ko
Если по какой-либо причине Вы не хотите или не можете загрузить KLD, то Вы можете статически включить поддержку Linux в ядро посредством опции options LINUX в файле конфигурации ядра. Затем соберите и проинсталлируйте новое ядро, следуя описанию в секции, посвященной конфигурации ядра .
Установить все требуемые библиотеки можно двумя путями: либо используя порт linux_base , либо установив их вручную .
Этот метод является самым простым, и мы рекомендуем воспользоваться именно им. Процесс аналогичен установке любого другого порта из коллекции портов . Просто выполните следующие команды:
# cd /usr/ports/emulators/linux_base # make install distclean
Теперь Вы можете работать с приложениями для Linux. Некоторые программы, возможно, будут сообщать о несоответствии подверсий некоторых системных библиотек. Однако, практически, это не вызывает каких-либо неудобств.
Если у Вас нет установленной коллекции портов, то можно установить требуемые библиотеки вручную Вам понадобятся разделяемые библиотеки для Linux, которые нужны программам, и runtime-компоновщик. Вам также потребуется создать «теневой корень» : директорию /compat/linux , где будут расположены Linux библиотеки. Если нужно загрузить какую-либо разделяемую библиотеку, FreeBSD сперва будет пытаться найти ее в этом дереве. Так, если программа загружает, например, /lib/libc.so , FreeBSD попытается открыть /compat/linux/lib/libc.so , и если такого файла не существует, будет пытаться открыть /lib/libc.so . Разделяемые библиотеки должны находиться в теневом дереве, а не в пути, сообщаемым командой Linux ld.so .
По мере работы с различными Linux программами, у Вас будет накапливаться некий базовый набор библиотек, которого будет достаточно для большинства существующих Linux приложений.
Что, если при установленном linux_base порте Ваше приложение все равно сообщает об отсутствии необходимой библиотеки? Как узнать, какая именно нужна библиотека и где ее взять? В принципе, есть два способа. Вам необходимо иметь привилегии суперпользователя для их осуществления.
Если у Вас есть доступ к машине, на которой установлен Linux, узнайте, какие библиотеки использует Linux приложение, и просто скопируйте из на свою машину. Например:
Допустим, Вы скачали по FTP Linux версию Doom’а (на Linux машине). Вы можете узнать, какие разделяемые библиотеки нужны Doom’у при помощи команды ldd linuxdoom :
% ldd linuxdoom libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0 libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0 libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29
Вам потребуются все файлы, перечисленные в последней колонке. Скопируйте их в директорию /compat/linux на Вашей системе, а также создайте символические ссылки на эти файлы, с именами ссылок из первой колонки соответственно. В итоге у Вас на машине должны быть следующие файлы:
/compat/linux/usr/X11/lib/libXt.so.3.1.0 /compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0 /compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
Note: Заметьте, что если у Вас уже есть какая-либо из перечисленных библиотек, то ее не нужно копировать заново. Однако, у Вас может быть более старая версия. В этом случае, лучше все-таки скопировать библиотеку поздней версии, изменив соответственно ссылку на нее. Предыдущую версию библиотеки можно удалить. Например, пусть у Вас есть следующие библиотеки:
/compat/linux/lib/libc.so.4.6.27 /compat/linux/lib/libc.so.4 -> libc.so.4.6.27
и какое-либо приложение требует библиотеку более поздней версии, судя по команде ldd :
libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29
Если подверсии немного отличаются, копировать /lib/libc.so.4.6.29 необязательно, так как программа, скорее всего, будет нормально работать и с устаревшей версией. Тем не менее, Вы можете заменить libc.so :
/compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
Note: Символические ссылки важны только для Linux программ. Runtime-компоновщик FreeBSD самостоятельно подберет правильные номера версий библиотек, и Вам не нужно об этом беспокоиться.
Для ELF-программ иногда требуется сделать так называемый «branding» . Если при попытке запустить ELF-файл, Вы получаете следующее сообщение об ошибке:
% ./linux-elf-программа ELF binary type not known Abort
то нужно изменить тип исполняемого файла, чтобы ядро FreeBSD правильно определило, что это Linux программа. Это можно сделать при помощи утилиты brandelf (1) :
% brandelf -t Linux linux-elf-программа
Следует отметить, что программы, для которых необходим «branding» , встречаются все реже и реже, и в недалеком будущем Вы вряд ли прибегнете к нему вообще.
Если DNS не настроен или недоступен, или Вы получаете это сообщение:
resolv+: «bind» is an invalid keyword resolv+: «hosts» is an invalid keyword
Источник
Linux как добавить библиотеку
Краткая инструкция по установке всех нужных для курса библиотек в Ubuntu
Содержание
На Linux рекомендуется использовать:
- последнюю версию компилятора clang
- последнюю версию системы сборки cmake
- среду разработки CLion либо QtCreator
Студенты могут получить бесплатную лицензию на CLion, используя скан студенческого билета: jetbrains.com/student/
Библиотеки из основного репозитория
Множество C/C++ библиотек доступно в основном репозитории системы (предполагаем, что вы используете Ubuntu 16.04 LTS или старше). Следующие библиотеки используются в нашем курсе:
- sdl2, sdl2-image, sdl2-mixer, sdl2-ttf в целях абстрагирования от операционной системы для создания окон, растеризации текстовых надписей, загрузки изображений с диска, загрузки и проигрывания звуковых файлов
- assimp3 для загрузки 3D моделей из множества форматов файлов
- bullet3 для расчёта столкновений в 3D пространстве
- tinyxml2 для загрузки XML
- glm для работы с линейной алгеброй в рамках задач 3D графики
Команда для установки данных библиотек:
Библиотека glbinding
Библиотека даёт прозрачный доступ к современным версиям OpenGL: программист использует API нужной ему версии, а glbinding сам запросит адреса функций выбранной версии у видеодрайвера. Рекомендуется использовать glbinding вместо обычных заголовков OpenGL.
Пакеты распространяются в специальном ppa:
После этого в CMake вы можете использовать find_package:
Библиотека anax
Библиотека используется для построения архитектуры программы на принципах Component-Entity-System. Для сборки склонируйте репозиторий и в каталоге клона вызовите cmake:
Далее выполните команду checkinstall, чтобы создать DEB-пакет “libanax-dev-custom” и установить его.
Библиотека nlohmann-json
Библиотека используется для загрузки и сохранения JSON. Для сборки склонируйте репозиторий и в каталоге клона вызовите cmake:
Далее выполните команду checkinstall, чтобы создать DEB-пакет “libnlohmann-json-dev-custom” и установить его.
Если команда завершилась успешно, вы можете начать использовать #include в своих проектах.
Установка последней версии cmake
Перед началом удалите существующую версию CMake: sudo apt-get remove cmake .
Зайдите на страницу загрузки (cmake.org) и скачайте пакет “Unix/Linux Source”. Распакуйте скачанный архив, перейдите в каталог и выполните следующие команды:
Далее выполните команду checkinstall, чтобы создать DEB-пакет “cmake-custom” и установить его. Также вам нужно удалить системный пакет cmake перед началом установки.
Если скрипт завершился успешно, проверьте версию cmake в системе командой cmake —version :
Установка последней версии clang
Вы можете скачать исходники LLVM/Clang из SVN и собрать, а затем установить с помощью checkinstall. Готовые скрипты для автоматизации этой задачи вы найдёте на странице gist.github.com/sergey-shambir/a075161d774e211e1a423826764c7d33 Для работы скриптов нужны установленные пакеты subversion, cmake и checkinstall.
- скрипт get_clang.sh скачивает исходный код LLVM/Clang и собирает через CMake
- скрипт install_clang.sh должен быть запущен через sudo, он соберёт и установит DEB-пакет “llvm-clang-custom”
- файлы postinstall-pak и preremove-pak должны находиться рядом с install_clang.sh при сборке пакета
Также вам нужно удалить системные пакеты llvm и clang перед началом установки.
Если оба скрипта завершились успешно, проверьте версию clang в системе командой clang++ —version :
Используем clang по всей системе
Если у вас установлен clang, вы можете включить его в качестве компилятора по умолчанию:
В появившемся консольном меню выберите clang:
Источник