кАК уМЕНЬШИТЬ рАЗМЕР еКЗЕШНИКА?
как можно максимально уменьшить размер исполняемого файла в этом компиляторе?
я поубирал линковку всех ненужных lib'ов, и все равно - даже обычный Hello world, занимает дофига... заранее спасибо!
пишу на чистом WinAPI. недавно начал пользовать MSVC++ 6.0.
как можно максимально уменьшить размер исполняемого файла в этом компиляторе?
я поубирал линковку всех ненужных lib'ов, и все равно - даже обычный Hello world, занимает дофига... заранее спасибо!
Попробуйте вообще отказаться от статических библиотек MFC (lib), используйте только динамические (dll). Еще можно выбрать режим оптимизации "Minimize Size". Отключите всю отладочную информацию. В общем, нужно порыться в настройках проекта и убрать все лишнее. Правда, Hello World под Windows в любом случае килобайт 20 - 30 займет, все-таки это не ДОС и не консольное приложение.
Попробуйте вообще отказаться от статических библиотек MFC (lib), используйте только динамические (dll). Еще можно выбрать режим оптимизации "Minimize Size". Отключите всю отладочную информацию. В общем, нужно порыться в настройках проекта и убрать все лишнее. Правда, Hello World под Windows в любом случае килобайт 20 - 30 займет, все-таки это не ДОС и не консольное приложение.
Попробуйте вообще отказаться от статических библиотек MFC (lib). Правда, Hello World под Windows в любом случае килобайт 20 - 30 займет, все-таки это не ДОС и не консольное приложение.
А почему фраза недавно начал пользовать MSVC++ 6.0 сразу предполагает использование MFC?
Можно посмотреть здесь http://www.catch22.org.uk/tuts/minexe.asp
пишу на чистом WinAPI. недавно начал пользовать MSVC++ 6.0.
как можно максимально уменьшить размер исполняемого файла в этом компиляторе?
я поубирал линковку всех ненужных lib'ов, и все равно - даже обычный Hello world, занимает дофига... заранее спасибо!
Народ, человек же сказал, что пишет "на чистом WinAPI". Что ж вы ему про MFC говорите :)
Попробуй следующее:
1) Билди это дело в release версии.
2) Можешь изменить выравнивание секций PE файла - добавь к коду строку
#pragma comment(linker,"/FILEALIGN:512")
(по умолчанию там 4096)
3) Можешь избавиться от стандартных библиотек -
#pragma comment(linker,"/ENTRY:ТОЧКА_ВХОДА")
#pragma comment(linker,"/NODEFAULTLIB")
где ТОЧКА_ВХОДА - имя финкции вида void <имя>();
Правда исчезнут всякие стандартные функции, но им можно найти замену в небольшом приложении. А вот с классами возникают проблемы.
4) Можешь сжать exe'шник каким-нибудь запаковщиком типа UPX - размер станет примерно в два раза меньше, а иногда и более того. При этом прога будет все также хорошо работать. :)
С первыми тремя пунктами Hello World скорее всего будет весить килобайта 4 8)
пишу на чистом WinAPI. недавно начал пользовать MSVC++ 6.0.
как можно максимально уменьшить размер исполняемого файла в этом компиляторе?
я поубирал линковку всех ненужных lib'ов, и все равно - даже обычный Hello world, занимает дофига... заранее спасибо!
Приведи код.
Куда выводишь, в консоль, в окно?
Используешь ли CRT?
Думаю, что такую программу можно сделать размером не более 1кб без каких-либо упаковщиков типа UPX.
Если будет время, прикину и выложу код.
Приведи код.
Куда выводишь, в консоль, в окно?
Используешь ли CRT?
Думаю, что такую программу можно сделать размером не более 1кб без каких-либо упаковщиков типа UPX.
Если будет время, прикину и выложу код.
меня интересовала эта тема в общем... сейчас есть задача - анализатор IP-пакетов, разбирает IP - пакет по кусочкам, выводит на консоль то что задано опциями командной строки, пишет логи... приложение - консольное, ну и некоторые Win32 API используються.
Если будет время, прикину и выложу код.
Простейший вывод "Helo World!" в консоль:
#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/MERGE:.data=.text")
#pragma comment(linker,"/ALIGN:512")
#pragma comment(linker,"/SECTION:.text,EWRX")
#pragma comment(linker,"/ENTRY:main")
#pragma comment(linker,"/NODEFAULTLIB")
#endif
#include <windows.h>
int print(const char *str)
{
DWORD n;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if( INVALID_HANDLE_VALUE != hStdOut
&& WriteFile(hStdOut, str, strlen(str), &n, NULL) )
return n;
return -1;
}
int main()
{
print("Hello World!\n");
return 0;
}
Как я и говорил, в релизе 1кб.