Использование динамических библиотек

30 сентября 2026

ID shared_libraries

Преимущества использования динамических библиотек

Использование динамических библиотек (файлов *.so) в решении дает следующие преимущества:

  • Экономия оперативной памяти.

    От одной и той же динамической библиотеки может зависеть множество исполняемых файлов и других динамических библиотек в решении. При этом часть динамической библиотеки, содержащая код и доступные только на чтение данные, загружается в оперативную память в единственном экземпляре.

    Динамические библиотеки могут загружаться в оперативную память и выгружаться из нее по инициативе программ, которые их используют. Это позволяет достичь того, чтобы динамические библиотеки находились в оперативной памяти только то время, в течение которого они действительно используются.

  • Удобство обновления ПО.

    Обновление динамической библиотеки распространяется на все зависимые от нее исполняемые файлы и динамические библиотеки без их повторной сборки.

  • Возможность реализовать механизм плагинов.

    Плагины для компонентов решения представляют собой динамические библиотеки.

  • Совместное использование кода и данных.

    Одна и та же динамическая библиотека может совместно использоваться несколькими процессами. Наряду с экономией оперативной памяти это исключает необходимость дублировать в исполняемых файлах общий код программ (помещенный в динамическую библиотеку) и позволяет хранить в динамической библиотеке общие данные программ (доступные только на чтение).

Работоспособность любых динамических библиотек, кроме поставляемых в составе KasperskyOS SDK или созданных разработчиком решения, не гарантируется.

В настоящее время динамические библиотеки libc.so и libpthread.so не поставляются в составе KasperskyOS SDK.

Особенности сборки исполняемых файлов, использующих динамические библиотеки

Исполняемые файлы, использующие динамические библиотеки, должны быть собраны с динамической компоновкой. (О CMake-командах, задающих способ компоновки исполняемых файлов, см. "Библиотека platform".)

Исполняемый файл, который должен компоноваться с динамической библиотекой, может быть скомпонован со статической библиотекой, если требуемая динамическая библиотека не найдена. Например, если используется CMake-команда target_link_libraries (client m), исполняемый файл программы client компонуется со статической библиотекой libm.a, если динамическая библиотека libm.so не найдена.

Добавление динамических библиотек в решение

Чтобы добавить динамические библиотеки в решение, нужно поместить их в KPA-пакеты вместе с теми программами, которые зависят от этих динамических библиотек. Для этого нужно использовать CMake-команду add_kpa_component (). Если динамическая библиотека входит в состав KPA-пакета, то после его установки эта библиотека будет помещена в директорию /data/packages.unpacked/<идентификатор KPA-пакета>/<версия KPA-пакета>/lib. Этот путь нужно указывать в вызовах функции dlopen() интерфейса POSIX и/или задать в качестве пути поиска динамических библиотек. Пути поиска динамических библиотек можно задать через переменную окружения LD_LIBRARY_PATH или в полях DT_RUNPATH и DT_RPATH секции .dynamic ELF-файлов (подробнее см. "Жизненный цикл динамической библиотеки"). Например, это можно сделать, задав значение переменной окружения LD_LIBRARY_PATH в параметре RUN_CONFIGURATION->ENV CMake-команды add_kpa_component ():

add_kpa_component (${PACKAGE}

RUN_CONFIGURATION "default"

...

# В переменную окружения KOS_APP_PACKAGE_DIR при

# запуске программы будет передан абсолютный путь

# к директории установки заданной версии KPA-пакета.

# Версия KPA-пакета задается в параметре VERSION

# CMake-команды add_kpa_package ().

ENV "LD_LIBRARY_PATH=\${KOS_APP_PACKAGE_DIR}lib")

Динамические библиотеки могут зависеть от других динамических библиотек, поэтому необходимо, чтобы каждая динамическая библиотека была добавлена со всеми зависимостями.

Не рекомендуется помещать динамические библиотеки в директорию /lib, так как в ней находятся системные динамические библиотеки.

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!