是否可以使用MINGW g ++生成小型可执行文件?

Tam*_*lei 2 linker compilation g++

据我所知,MINGW-g ++编译较大的可执行文件,因为它静态地链接了很多东西.另一方面,MSVC++动态链接来自VCRedist包的DLL,这就是它产生较小可执行文件的原因.

但是,是否可以在Windows上以类似的方式使用g ++进行编译?不一定是MINGW-g ++,但我可以使用Qt Creator(我没有将Qt添加为标签,因为它与问题无关).

rub*_*nvb 6

MinGW完全能够动态链接到msvcrt运行时.你没有摆脱这种方式的唯一混乱是GCC/MinGW启动代码,这不是很大.

一个小的C++测试程序(简单的iostream hello world程序,注意:对于普通的C printf版本,我得到了相同的结果).

#include <iostream>

using namespace std;

int main()
{
cout << "Hello World!" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

COMMANDLINES:

g++ main.cpp -MD -Os -s -o test.exe
cl /MD /Os main.cpp /link /out:test2.exe
Run Code Online (Sandbox Code Playgroud)

可执行文件大小:

海湾合作委员会:13kB

MSVC:6kB

虽然这是双倍的,但所有必要的启动代码都会造成很大的差异.对于较大的程序,差异可以忽略不计.

  • MinGW始终链接VC运行时(C:\ Windows\System32中的msvcrt.dll).`-MD`与MSVC的`/ MD`完全相同.我认为你误解了MinGW是什么/做什么:它构建本机可执行文件就像Visual Studio编译器一样,但是使用GNU工具链.因此,两者之间没有共享一小部分代码,但总是隐藏在远离用户的所有代码中.此外,C++ ABI有点不同(g ++的链接与GCC的libstdc ++,而不是MS的,与C库相反,在两种情况下都是相同的),但这总结了差异. (2认同)