FAQ:WinAPI VCPP:создать exe-шник меньше 24-х килобайт

Материал из Весельчак У
Версия от 00:38, 7 августа 2008; Mczim (обсуждение | вклад) (Как создать в VC++ exe-шник меньше 24-х килобайт?)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Как создать в VC++ exe-шник меньше 24-х килобайт?

В исходнике нет ничего, кроме точки входа, а размер получается 24 килобайта. Вот исходник:

#include "stdafx.h"
int APIENTRY WinMain(
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR lpCmdLine,
	int nCmdShow)
{
	return 0;
}

1) Размер можно уменьшить, покрутив настройки линкера. Откройте свойства проекта и выберите вкладку "Link" (или нажмите Alt+F7). Удалите все имена библиотек из поля "Object/library modules:" и наберите в нем "MSVCRT.LIB kernel32.lib user32.lib". Нажмите OK и скомпилируйте. Размер файла будет сокращён до 16кБ. Также поставьте галку "Ignore all default libraries" во вкладке Link свойств проекта. Затем можно поиграться с размером страниц кода - с помощью опции ALIGN линкера в поле "Project Options". Синтаксис:

/ALIGN:N

, где N - число 2, 4, 8, ... (т.е. степень двойки). Часто наилучший вариант оказывается - значение 4096. Будет предупреждение:

LINK : warning LNK4108: /ALIGN specified without /DRIVER or /VXD; image may not run

Но если файл запустился, то всё нормально.

2) Можно задать такие настройки:

#pragma comment(linker, "/opt:nowin98")
#pragma comment(linker, "/entry:WinMain")
#pragma comment(lib, "user32.lib")

3) Можно, также, почитать статью в MSDN: "Reduce EXE and DLL size with LIBCTINY.LIB".