|
|
|
Размер ехе-шника. Опции компилятора и линкера04.09.2009, 15:08. Показов 3835. Ответов 8
Метки нет (Все метки)
Доброго времени суток, господа программисты!!
Переписываю свой скринсайвер на С++ с оптимизацией был на Delphi без оптимайза (http://narod.ru/disk/123465980... m.scr.html) Но при построении релиза размер ЕХЕ, по-моему, слишком велик - 152Кб. Из них 64кб-ресурсы. На делфи занимал 108кб. Использую следующие опции компилятора: /Ox /GL /I "\3D" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /FD /EHsc /MT /arch:SSE /fp:fast /Fo"Release\\" /Fd"Release\vc80.pdb" /W1 /nologo /c /TP /errorReport romptопции линкера: /OUT:"D:\MyProgs\VS2005\Directed Stream\Release\Directed Stream.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST /MANIFESTFILE:"Release\Directed Stream.exe.intermediate.manifest" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /LTCG /MACHINE:X86 /ERRORREPORT:PROMPT opengl32.lib glu32.lib winmm.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Как ещё можно сжать ехе шник по-мимо использования упаковщиков типа UPX, ASPack? Есть ли ещё какие либо опции для уменьшения размера? Если использовать Multi-threaded DLL (/MD) вместо Multi-threaded (/MT) то код уменьшается аж до 96Кб, но тогда используется ДЛЛ без которой наверно не запустится.
0
|
|
| 04.09.2009, 15:08 | |
|
Ответы с готовыми решениями:
8
Опции компилятора Опции компилятора Gw/Gy Большой размер exe-шника |
|
0 / 0 / 0
Регистрация: 05.09.2009
Сообщений: 6
|
|
| 05.09.2009, 21:04 | |
|
Можно stub свой написать.
Насколько я помню, в 4 байта ее можно ужать.
0
|
|
|
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
|
||||||
| 06.09.2009, 02:01 | ||||||
|
Вот трюк, которым пользуюсь уже давно.
2. Добавь в него этот файл. 3. Установи активную конфигурацию - Release. 4. Откомпилируй и посмотри размер. 5. Раcкомментируй строку №3 (#define APP_TINY) 6. Откомпилируй и посмотри размер. У меня: на 4 шаге получилось 24 Кб, а на 6 - 2 Кб!!! Или реальный пример. Моя последняя программа с отключенным APP_TINY получилась размером 396 Кб, после включения и перекомпиляции уже 120 Кб. Как тебе?
2
|
||||||
|
|
|
| 06.09.2009, 21:05 [ТС] | |
|
@err,hr, что такое stub?
polivets, ОГО! Обязательно проверю. Благодарю!Добавлено через 1 час 27 минут polivets, попробывал код на своей программе - не вышло требует какую-то либку наверно Linking... mainwindow.obj : warning LNK4229: invalid directive '/FILEALIGN:512' encountered; ignored mainwindow.obj : warning LNK4229: invalid directive '/IGNORE:4078' encountered; ignored global.obj : error LNK2001: unresolved external symbol @__security_check_cookie@4 global.obj : error LNK2001: unresolved external symbol _rand GLObjects.obj : error LNK2001: unresolved external symbol "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) GLObjects.obj : error LNK2001: unresolved external symbol "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) mainwindow.obj : error LNK2001: unresolved external symbol __wtoi mainwindow.obj : error LNK2001: unresolved external symbol __itow D:\Programer\Visual Studio 2005\Directed Stream\ssDirected_Stream\Release\ssDirec ted_Stream.exe : fatal error LNK1120: 6 unresolved externals Добавлено через 1 минуту Что посоветуете? Добавлено через 11 минут Добавил MSVCRT.LIB теперь вылезает это: fatal error LNK1137: invalid argument '.text,EWRX' specified with /SECTION
0
|
|
|
MCSD: APP BUILDER
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
|
|
| 06.09.2009, 21:30 | |
|
snake32,
polivets, попробывал код на своей программе - не вышло требует какую-то либку наверно потому что этот код -это для программы уровня HelloWorld как видишь, оттуда даже выйти по-нормальному нельзя, а только через ExitProcess отказ от точки входа по-умолчанию означает что стандартные функции тебе скорее всего будут недоступны.
0
|
|
|
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
|
||||||||||||
| 06.09.2009, 22:18 | ||||||||||||
|
Недостатком является, то что становяться недоступными переменные, передающиеся в WinMain из стуба, но это очень просто обоити используя соответсвующие API функции.
2
|
||||||||||||
|
|
||||||
| 07.09.2009, 01:24 [ТС] | ||||||
|
polivets, у меня VS 2005.
Вот собственно код с WinMain'ом. Без #define APP_TINY компилится нормально.
Не по теме: А вообще оптимизация на таком уровне даже завораживает :jokingly:
0
|
||||||
|
|
|
| 07.09.2009, 12:04 [ТС] | |
|
Пытаюсь разобраться с опциями линкера. Нашёл и прочитал статью про CRT:
http://www.rsdn.ru/article/cpp/crt.xml Кое-что прояснилось, но всё равно пока не понял до конца В программе активно использую ООП, т.е. классы с конструкторами и деструкторами, если new и delete можно заменить, то что делать с классами? #pragma comment(linker,"/MERGE:.rdata=.text") - вообще для меня пока секрет. Объединяются сегменты данных(.rdata - судя по названию, это сегмент данных только для чтения, те там хранятся константы? или что?) и текст(это вообще не понял. что в нем обычно содержится? и Зачем он нужен?) Где можно почитать про эти секции?( желательно на русском ). ASM знаю на малом уровне. (пытался программить на TASM консольные приложения, где из секций были .code и .data)
1
|
|
| 07.09.2009, 12:04 | |
|
Помогаю со студенческими работами здесь
9
Уменьшить размер ехе-шника (Delphi XE) AVRStudio – таблица прерываний - опции линкера Де компиляция ехе"шника Извлечь иконку с ехе-шника Запуск ехе-шника на чистой машине Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|