我通常用 C 编写大小编码演示制作比赛(64kb),但考虑转向 C++。
在MinGW g++ 下,我遇到了 .exe 大小的问题。(在使用可执行打包程序之前,我必须将其降低到 <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;
它变成193 kb
当我添加:
#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,编译器链接器标志来修剪库会更有帮助)