如何加快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 <[email protected]>
=== 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
最佳答案
鉴于我无法在干净的Windows 10 VM中重现该问题,并且对输出文件名的依赖使我走上了防病毒/防恶意软件干扰的道路。
fltmc instances
列出了几种可能的文件系统过滤器驱动程序; guess-n-check将其范围缩小到Carbon Black的两个:carbonblackk
和ParityDriver
。
使用Regedit通过将以下两个注册表项中的Start
设置为0x4
(“Disabled”,0x2
==自动,0x3
==手动)来禁用它们,然后重新启动即可解决此问题:
关于c++ - 加快极慢的MinGW-w64编译/链接速度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55172467/