350 ресурсов (вариант all) · LZMA · версия общая с бинарником

Справочник встроенных ресурсов VFS

Всё, что нужно для компиляции скриптов, лежит внутри exe — это и есть вещественное воплощение «ноль установки на целевой машине». Упаковка на этапе сборки идёт по вариантам: заголовки невыбранных расширений в VFS не попадают (изоляция подтверждена зондами времени выполнения).

/XServer/ — тройка SDK

ПутьСодержимое
/xs/xsbase.hконтрактный заголовок: 14 символов, 20 API, структуры и перечисления — #include <xsbase.h> автоматически подтягивает следующие два
/xs/xrt_decl.hполные публичные объявления xrt (3 030 прототипа API)
/xs/libtcc.hобъявления API вложенной компиляции

Эти три заголовка выпускаются в ногу с бинарником (при сборке пакуются из дерева исходников) — дрейф «заголовок старый, библиотека новая» невозможен.

/tcc/ — дерево заголовков

ПутьСодержимое
/tcc/include/tcclib.hвспомогательные объявления рантайма TCC
/tcc/include_win/**заголовки Windows SDK (урезанные до сохраняемого набора: весь winapi плюс curl)
/tcc/include_linux/**стандартные заголовки Linux-стороны (полный набор C99/C11)

У Windows-стороны есть ещё один неявный канал: msvcrt и kernel32 в режиме компиляции в память подключаются автоматически — скрипты пользуются стандартной библиотекой и базовыми API Win32 без единой строки конфигурации линковки.

/tcc/ — определения библиотек

  • /tcc/lib/*.def: kernel32, msvcrt, user32, gdi32, shell32, ole32, oleaut32, ws2_32, imm32 — ссылаются напрямую через #pragma comment(lib, ...) или tcc_add_library
  • /tcc/lib/libtcc1.a: вспомогательная библиотека рантайма TCC (компилятор использует её сам)

Такая библиотечная поверхность означает: процессы (CreateProcess), COM (автоматизация Excel), нативные сокеты и операции Shell доступны в скриптах напрямую — обсуждение границ возможностей см. в главе 44.

Различия вариантов

ВариантДоп. содержимое VFSДоп. символы
default——
sqlitesqlite3.h попадает в VFS+272 (sqlite3_*)
xtpxtp2.h попадает в VFS+13 (xtp2_*)
sqlite xtpоба заголовка+285
xllm / xllm-sessionдва заголовка в VFS+98 (xllm_*/xllmSession_*)
xmail / xsmtp xpop3 ximapдерево заголовков xmail + протокольные + слой прокладок xrt+283 (xrtMail*/Smtp/Pop3/Imap*)
md4cmd4c.h + md4c-html.h+2 (md_parse/md_html)
xacmeдерево заголовков xacme + заголовки потока+20 (xrtAcme*/xacmeClient*)
qrcodegenqrcodegen.h + qrpng.h+10 (qrcodegen_*/png)
allдеревья заголовков всех десяти библиотек+700

Изоляция строгая: в варианте default скрипт с include <sqlite3.h> получит ошибку компиляции «заголовок не найден», а ссылка на символы sqlite3_* не слинкуется — невыбранные возможности не существуют в процессе: не скрыты, а отсутствуют физически.

Упаковщик этапа сборки (gen_tcc_resources.py) пропускает перепаковку неизменённых входов по дайджесту SHA256; элементы VFS выбирают хранение STORE или LZMA по выгоде сжатия. О API времени выполнения для работы с VFS см. справочник вложенной компиляции · файловый слой VFS.