Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.47.253] |
|
Сообщ.
#1
,
|
|
|
Всем привет!
После компиляции Clang'ом (в отличие от GCC) получается довольно внушительного размера EXE-шник. Пустой файл занимает 86/105 Кб (32/64 бита). Да, он не требует MSVCRT.DLL и пр., тем не менее. Наверняка же можно скомпилить так, чтобы код занимал гораздо меньше места на диске (с требованием внешних DLL). Как это можно сделать? Какие опции задать? |
Сообщ.
#2
,
|
|
|
Кто владеет хорошо английским и не поленится - можно перевести на человеческий это:
Цитата This blog post presents several techniques to make the binaries resulting from C or C++ compilation smaller with GCC (or Clang). Please note that almost all techniques are tradeoffs, i.e. a smaller binary can be slower and harder to debug. So don't use the techniques blindly before understanding the tradeoffs. The recommended GCC (and Clang) flags: Other ways to reduce the binary size: |
Сообщ.
#3
,
|
|
|
Цитата JoeUser @ У меня g++, как правило, выдаёт 64-битный код меньшего размера, чем 32-битный Use -m32 to compile a 32-bit binary. 32-bit binaries are smaller than 64-bit binaries because pointers are shorter. Интересный материал, спасибо, но это не совсем то, что я спрашиваю. Тут нет ни слова о том, как вынести библиотеки из EXE-шника в DLL. Может быть, такой возможности вообще нет в Clang? |
Сообщ.
#4
,
|
|
|
Цитата Jin X @ как вынести библиотеки из EXE-шника в DLL. В смысле? Какие именно библиотеки? Добавлено И да ... выложи код. |
Сообщ.
#5
,
|
|
|
JoeUser, да нечего там выкладывать
Пусть будет: #include <iostream> int main() { std::cout << "Hello World!\n"; return 0; } Компилим gcc, получаем 20 Кб, т.к. основные библиотечные функции лежат в DLL (msvcrt.dll, libgcc_s_dw2-1.dll, libstdc++-6.dll). Компилит шлангом, получаем 180+ Кб, т.к. всё в EXE-шнике (импортируется только kernel32.dll). |
Сообщ.
#6
,
|
|
|
Цитата Jin X @ Компилим gcc, получаем 20 Кб, т.к. основные библиотечные функции лежат в DLL (msvcrt.dll, libgcc_s_dw2-1.dll, libstdc++-6.dll). Компилит шлангом, получаем 180+ Кб, т.к. всё в EXE-шнике (импортируется только kernel32.dll). Дык у тебя наверное когда ты компилишь gcc происходит динамическая линковка по умолчанию, а когда компилишь шлангом, то судя по всему статическая линковка. Попробуй подкинуть ему динамические либы и указать ключик -shared. Тут вроде об этом написано: http://nickdesaulniers.github.io/blog/2016...amic-libraries/ |