Условия, необходимые для использования динамических библиотек
Чтобы использовать динамические библиотеки в решении на базе KasperskyOS, нужно выполнить следующие условия:
- Процессы, использующие динамические библиотеки, должны иметь доступ к файловым системам, в которых хранятся файлы динамических библиотек. Доступ к файловым системам обеспечивается VFS, которая может исполняться в контексте процессов, использующих динамические библиотеки, а также может быть отдельным процессом. VFS и другое ПО, с помощью которого VFS работает с накопителем (например драйвер накопителя), не должны использовать динамические библиотеки.
- Тулчейн должен поддерживать динамическую компоновку.
В составе KasperskyOS SDK поставляется отдельный тулчейн для каждой поддерживаемой архитектуры процессора. Требуемый тулчейн может не поддерживать динамическую компоновку. Чтобы проверить, что динамическая компоновка поддерживается, нужно использовать в корневом файле
CMakeLists.txt
CMake
-командуget_property()
следующим образом:get_property(CAN_SHARED GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS) if(CAN_SHARED) message(STATUS "Dynamic linking is supported.") endif() - Исполняемый код программ, использующих динамические библиотеки, должен быть собран с флагом
-rdynamic
(с динамической компоновкой).Если тулчейн поддерживает динамическую компоновку, то
CMake
-командаinitialize_platform()
делает так, что для сборки всех исполняемых файлов, заданных черезCMake
-командыadd_executable()
, этот флаг используется автоматически.
Если CMake
-команда initialize_platform(FORCE_STATIC)
вызывается в корневом файле CMakeLists.txt
, то тулчейн, поддерживающий динамическую компоновку, выполняет статическую компоновку исполняемых файлов.
CMake
-команда project_static_executable_header_default()
влияет на сборку исполняемых файлов, заданных через последующие CMake
-команды add_executable()
в одном файле CMakeLists.txt
. Тулчейн, поддерживающий динамическую компоновку, выполняет статическую компоновку этих исполняемых файлов.
CMake
-команда platform_target_force_static()
влияет на сборку одного исполняемого файла, заданного через CMake
-команду add_executable()
. Тулчейн, поддерживающий динамическую компоновку, выполняет статическую компоновку этого исполняемого файла.
Исполняемый код программ, который собирается с флагом -rdynamic
, компонуется со статической библиотекой, если динамическая библиотека не найдена. Например, если используется CMake
-команда target_link_libraries
(client -lm)
, программа client
компонуется со статической библиотекой libm.a
, если динамическая библиотека libm.so
не найдена.