Разделяемые библиотеки без внешних зависимостей

Дмитрий Банщиков

Я расскажу о своём опыте разработки антивирусного движка на C++ в виде разделяемой библиотеки. Уникальной особенностью является отсутствие каких-либо внешних зависимостей (runtime C++ или C). Вся эта связка построена вокруг использования кастомного toolchain'а на GCC для специального таргета, которым собирается libc newlib для этого же таргета, поверх которого собирается libstdc++. Соответственно, разделяемая библиотека собирается через кастомный тулчейн с кастомными libgcc_s, libc, libcstdc++ (изменения только в сборке). Все взаимодействие со средой выполнения осуществляется через ABI разделяемой библиотеки.

Таким образом, внутри библиотеки сохраняется использовать полноценные современный С++ без ограничений (RTTI, exceptions, iostream, etc), что уходит в libstdc++->libc (newlib)| l ibgcc->ABI.

Подобный подход проверялся на тулчейнах GCC/newlib/libstdc++ для Linux, и clang/newlib/libc++ для MacOS.

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

Platinum спонсор

Gold спонсоры

Silver спонсоры

Community спонсоры