Сборка
очень маленьких программ в Borland C++ Builder
(06-май-2003)
(По материалам конференции.)
Здесь описан порядок сборки программ или DLL не нуждающихся ни в VCL ни в RTL.
Собрать программу без VCL позволяет Wizard создания консольного приложения. Как же собрать программу без RTL?
Обычным образом собрать самостоятельную программу размером меньше 50Kb не позволяет постоянное присутствие в её теле ссылок на функции RTL(Runtime Library), даже если вы в них и не нуждаетесь. Наличие этих функций обусловлено тем, что Builder добавляет к программе стартовый код, который работает первым при запуске программы и только затем передаёт управление на вашу точку входа в зависимости от типа программы: main, WinMain, DllMain или DllEntryPoint. Этот стартовый код добавляется в секции файла описания проекта BPR <LINKER> ALLOBJ. В этом поле перечисленны объектные файлы, в порядке их добавления в тело программы. На первое место Builder ставит файл:
c0x32.obj - для программ с точкой входа
- main.
c0w32.obj - для программ с точкой входа - WinMain.
c0d32.obj - для DLL с точкой входа - DllMain или DllEntryPoint.
Чтобы избавиться от присутствия кода RTL, необходимо вручную подправить файл проекта BPR и подставить свой стартовый код, который может состоять из одной команды jmp:
|
Чтобы откомпилировать данный файл достаточно его вставить в любой проект и сделать Compile, после чего его можно убрать из проекта.
Сделав объектный файл своего стартового кода, вы можете указать его в файле BPR. Например если ваш файл называется Myc0d32.obj, то секция <LINKER> будет выглядеть так:
<LINKER>
<ALLOBJ value="Myc0d32.obj $(OBJFILES)"/>
<ALLRES value="$(RESFILES)"/>
<ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib"/>
</LINKER>
Указание Myc0d32.obj именно в секции <LINKER> на первом месте, гарантирует вам то, что ваш стартовый код будет действительно стартовым. Но ничто не мешает вам просто указать его первым в определении OBJFILES.
В итоге:
Вы получаете возможность собирать маленькие программы написанные на C, используя
Borland C++ Builder. При этом вы конечно лишаетесь всех прелестей RTL. Но в
вашем распоряжении WinApi. Минимальный размер получаемых программ около 4Kb,
что вполне приемлемо, к тому же там уже зарезервированно место под ваш код.
Рабочие примеры вы можете взять здесь