如何加速MinGW-w64极慢的C ++编译/链接过程?
编译一个微不足道的“Hello World”程序:
#include <iostream>
int main()
{
std::cout << "hello world" << std::endl;
}
在这台其他情况下未加载的 Windows 10 机器上(i7-6700,32GB RAM,不错的SATA SSD),需要3分钟:
> ptime.exe g++ main.cpp
ptime 1.0 for Win32, Freeware - http://www.pc-tools.net/
Copyright(C) 2002, Jem Berkes <jberkes@pc-tools.net>
=== g++ main.cpp ===
Execution time: 180.488 s
Process Explorer 显示 g++
进程树在 ld.exe
中崩溃,持续时间内没有使用任何可感知的 CPU 或 I/O。
通过 API Monitor 运行 g++
进程树显示 ld.exe
中有三个异常长的系统调用:两个 NtCreateFile()
和一个 NtOpenFile()
,每个调用对 a.exe
进行操作,并且每个调用需要 60 秒钟。
只有当使用默认的 a.exe
输出时才会出现缓慢; g++ -o foo.exe main.cpp
最多需要 2 秒钟。
“那就不要使用 a.exe
作为输出名称!”并不是真正的解决方案,因为此行为会导致 CMake 花费很长时间进行编译器功能检测。
GCC 工具链版本:
>g++ --version
g++ (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0
>ld --version
GNU ld (GNU Binutils) 2.30