Компилятор под винду с минимальным размером exe

Helga87

Ищу компилятор, который умеет делать минимальный размер .exe и который умеет собирать виндовые бинарники (достаточно 32-битных). Язык не важен, хотя подозреваю, что компилятор-победитель совершенно случайно окажется С-компилятором.
Требуется, чтобы .exe не зависел от внешних библиотек, отличных от стандартных виндовых. Минимальность .exe проверяется на программе "Hello, world!". Пока что в победителях Visual Studio с 56 кб без внешних зависимостей и TinyC с1536 байтами и зависимостью на msvcrt.dll.

vall

а как там lcc поживает?

elenangel

  
program Project1;

{$APPTYPE CONSOLE}

begin
{ TODO -oUser -cConsole Main : Insert code here }
Writeln('Hello, world!');
Readln
end.

project1.exe 15360 байт
Borland Delphi 7 Enterprise
зависимости от
kernel32.dll
user32.dll
advapi32.dll

katrin2201

asm за компилятор считается? =)

bleyman

Во-первых, у меня 2008 студия компилит свежесозданный дефолтный хелловорлд с мелкими твиками в 6656 байт. Что я делаю не так? Ну, это с использованием дллки конечно.
Во-вторых, наличие стандартной библиотеки нужно? Ну, если я вместо printf буду апишку вызывать, то прога влезет в килобайт, если мне не изменяет память.

0000

Вроде на sources.ru под Delphi exe-шник собирали, который в 2.5Кб был.
Правда там отрубали все что можно и кроме MessageBox он ничего делать не мог.

bleyman

Вот, короче, я скомпилил такое:
#include<windows.h>

int main
{
HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE);
char s[] = "Hello, World!";
WriteFile(stdout, s, sizeof(s 0, 0);
}

В ровно два килобайта. Причём они состоят из нулей всего чуть менее, чем всё, типа линкер почему-то считает, что сегменты обязательно красиво алайнить. Ну, если ты хочешь что-нибудь сложнее хелловорлда, то, наверное, подобное поведение тебя не очень сильно расстроит!
Собственно, никакой особой магеи не было, отключил все стандартные библиотеки, после чего аккуратно прошёлся по опциям компайлера/линкера отрубая всё лишнее, типа генерации манифеста (он, сцука, зачем-то в конец экзешника тоже какой-то кусок XML дописывает дебаг инфы етс., периодически рекомпиля и заглядывая в файл.

nawok

Если у тебя цель - минимальный .exe, то после компиляции файл еще можно и сжать, например, с помощью upx'а.

karkar

В MSVC можно и 1 кб сделать.
http://dklab.ru/chicken/nablas/28.html

Andbar

эта штука компилится в 4кб, зависимости - RTL70.BPL, KERNEL32.DLL :p

procenkotanya

Для 1..4k интро вовсю юзают crinkler (compressing linker)

kruzer25

чтобы .exe не зависел от внешних библиотек, отличных от стандартных виндовых
Под "стандартными виндовыми" что имеется в виду?

Andbar

Требуется, чтобы .exe не зависел от внешних библиотек, отличных от стандартных виндовых.
Да, кстати. Если не будет зависимости от kernel32.dll, то такой PE-exe, как минимум, не загрузится на Win2k. Про более поздние версии windows, к сожалению, не в курсе

bleyman

Ня! Половину прагм пришлось закомментить, правда, ибо устарели, но да, 1 килобайт получился.

Helga87

Спасибо всем!
MSVC 2008 — хорошая стартовая точка для начала игр с уменьшением размера текущего проекта.

elenangel

та штука компилится в 4кб, зависимости - RTL70.BPL, KERNEL32.DLL
ты как-то странно компилил, у меня скомпилилась без всяких rtl70, зависимости смотрел по F3 Тоталом

Andbar

ты как-то странно компилил, у меня скомпилилась без всяких rtl70, зависимости смотрел по F3 Тоталом
ага, я включил использование run-time packages. Если бы борланд и микрософт сотрудничали, то они бы могли быть включены в состав дистрибутива ОС... а так да, этот пакетик довольно много весит. Кстати, стройка по умолчанию их использует.
Оставить комментарий
Имя или ник:
Комментарий: