私は通常、サイズコーディングのデモ作成コンテスト (64kb) のために C で書いていますが、C++ に移行することを検討しています。
MinGW g++では、.exe のサイズに問題があります。(executable-packers を使用する前に、100 kb 未満にする必要があります。)
私はこれを見てきました:
MinGW g ++コンパイラによって生成された実行可能ファイルのサイズを減らすには?
ただし、私はすでにMinGW/g++ 4.8.1 と -s -Os を使用しています ... 以下を参照してください (4.8.1 についても: unrecognized option '-shared-libstdc++'
とcannot find -lstdc++_s
)。
この小さな helloworld には10 kb しかありません (これで問題ありません)。
#include "windows.h"
int main() {
MessageBoxA(0, "test", "test", 0);
return 0;
}
ただし、追加すると:
#include <string>
...
std::string asdf;
193kbになります
そして、私が追加すると:
#include <iostream>
その後、756 kb になります。
私はこれらのフラグを使用しています:
-std=c++11
-Wall
-s (or -Wl,-s)
-Os
-DNDEBUG
-fno-exceptions
-fno-rtti
(note: removed those with no effect)
私が使用するものだけをリンクする方法が必要です。私は何が欠けていますか?
オプション 1: -shared-libstdc++ または -lstdc++_s を MinGW/g++ 4.8.1 で動作させることは可能ですか?
オプション 2:-nostdlib
と置き換えようとmain
するとWinMain
:
#include "windows.h"
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) {
MessageBoxA(0, "test", "test", 0);
return 0;
}
コンパイラの警告は表示されませんが、ランタイム クラッシュが発生します。ただし、C としてコンパイルすると正常に動作します。(あなた/私がcrt-startupのデバッグに時間を費やしたくないのでオプションです。ライブラリをトリミングするためのコンパイラーリンカーフラグがより役立ちます)