Чтобы добавить динамические библиотеки в образ решения на базе KasperskyOS, нужно использовать параметры PACK_DEPS_COPY_ONLY ON, PACK_DEPS_LIBS_PATH и PACK_DEPS_COPY_TARGET в CMake-командах build_kos_qemu_image() и build_kos_hw_image().
Пример:
set(RESOURCES ${CMAKE_SOURCE_DIR}/resources)
set(FSTAB ${RESOURCES}/fstab)
set(DISK_IMG ${CMAKE_CURRENT_BINARY_DIR}/ramdisk0.img)
set(RESOURCES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../resources)
set(EXT4_PART_DIR ${CMAKE_CURRENT_BINARY_DIR}/../system_hdd)
set_target_properties(${vfs_ENTITY} PROPERTIES
EXTRA_ARGS
" - \"-f\"
- \"fstab\""
EXTRA_ENV
" ROOTFS: ramdisk0 / ext4 0"
${blkdev_ENTITY}_REPLACEMENT "${ramdisk_ENTITY};${sdcard_ENTITY}")
add_custom_target(copy-so)
add_custom_command(OUTPUT ${DISK_IMG}
COMMAND ${CMAKE_COMMAND} -E copy_directory ${RESOURCES_DIR}/rootdir ${EXT4_PART_DIR}
COMMAND mke2fs -v -d ${EXT4_PART_DIR} -t ext4 ${DISK_IMG} 40M
DEPENDS copy-so
COMMENT "Creating disk image '${DISK_IMG}' from files in '${EXT4_PART_DIR}' ...")
build_kos_hw_image(kos-image
...
IMAGE_FILES ${ENTITIES_LIST} ${FSTAB} ${DISK_IMG}
PACK_DEPS_COPY_ONLY ON
PACK_DEPS_LIBS_PATH ${EXT4_PART_DIR}/lib
PACK_DEPS_COPY_TARGET copylibs)
if(PLATFORM_SUPPORTS_DYNAMIC_LINKING)
add_dependencies(copy-so copylibs)
endif()
Динамические библиотеки, от которых зависят программы решения, будут добавлены в образ накопителя (например, с файловой системой ext4), который будет включен в образ решения.
Динамические библиотеки, которые загружаются в память вызовом функции dlopen() интерфейса POSIX, не попадут в образ решения.
Система сборки выполняет следующие действия:
PACK_DEPS_LIBS_PATH CMake-команд build_kos_qemu_image() и build_kos_hw_image(). (Чтобы найденные динамические библиотеки попали в образ накопителя, эта директория должна находиться в файловой системе, которая будет помещена в образ накопителя.)Чтобы создать образ накопителя, нужно использовать CMake-команду add_custom_command(). Цель, указанная в параметре DEPENDS CMake-команды add_custom_command(), означает создание образа накопителя. Цель, указанная в параметре PACK_DEPS_COPY_TARGET CMake-команд build_kos_qemu_image() и build_kos_hw_image(), означает копирование динамических библиотек. Чтобы образ накопителя был создан только после завершения копирования динамических библиотек, нужно использовать CMake-команду add_dependencies().
Чтобы добавить образ накопителя в образ решения, нужно указать полный путь к образу накопителя в параметре IMAGE_FILES CMake-команд build_kos_qemu_image() и build_kos_hw_image().