gcc -s とその先
#include <windows.h> int WINAPI WinMain(HINSTANCE hi, HINSTANCE hp, LPSTR cl, int cs) { return 0; }
ファイルサイズが大きすぎる
WinMain 関数で、最後に 0 を返すだけで何の処理も行わない C のソースコード nop.c を gcc でコンパイルすると、90.9 KB の EXE ファイルが出来上がる。
gcc nop.c -mwindows
何もしないのに 90.9 KB になるとか、どういうことなの・・。
オプション -s
で小さくする
gcc には -s
というオプションがあり、ファイルサイズを小さくする効果がある。
gcc -v --help
では、以下のように説明されている。
-s, --strip-all Strip all symbols
シンボルというものを生成アプリケーションファイルから取り除くという意味である。
シンボルとは、アプリケーションのデバッグをしやすくするために埋め込むものらしいので、通常は不要である。
gcc nop.c -mwindows -s
この -s
オプションをつけて実行すると、一気に 18.0 KB まで減った。
もっと小さくしたいのだが
しかし、まだ大きい。何もしないのに 18.0 KB もある。ちょっとしたフリーソフトの中には、5KB 程度のものがあったはずだ。何か秘訣があるに違いない。
というわけで、World Wide Web で調べていたのだが、いくつかの役立つ情報を入手することができた。
gcc が行う 2 つの処理、すなわち、コンパイルとリンクであるが、肥大化の原因となるライブラリをリンクしないようにすればよさそうだ。
そこで、リンク処理用のオプションを試したのだが、-nostdlib
や -nodefaultlibs
ではうまくいかなかった。
つづく