加快极慢的MinGW-w64编译/链接速度?

时间:2019-03-14 21:42:52

标签: c++ windows cmake linker mingw-w64

我如何才能极大地加快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++的{​​{1}}进程树触底,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

1 个答案:

答案 0 :(得分:1)

鉴于我无法在干净的Windows 10 VM中重现该问题,并且对输出文件名的依赖使我走上了防病毒/防恶意软件干扰的道路。

fltmc instances列出了几种可能的文件系统过滤器驱动程序。猜测n检查将其缩小到Carbon Black中的两个:carbonblackkParityDriver

使用Regedit通过将以下两个注册表项中的Start设置为0x4(“ Disabled”,0x2 == Automatic,0x3 == Manual)来禁用它们通过重启修复了速度缓慢:

  • HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ carbonblackk
  • HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ ParityDriver