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

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

Дмитрий прошел путь от сотрудника службы технической поддержки хостинг провайдера до системного администратора UNIX, после чего переключился на разработку и последние шесть лет использует C/C++ в разнообразных userspace/kernelspace проектах для UNIX, связанных с безопасностью и не только. Считает что опыт системного администрирования помогает в разработке и позволяет видеть задачи более полно. В настоящее время занимается решением околосетевых задач в Вконтакте.


Я расскажу о своём опыте разработки антивирусного движка на 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.

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

Slides in pdf

Platinum спонсор

Gold спонсоры

Silver спонсоры

Community спонсоры