Как я могу ускорить MinGW-w64 чрезвычайно медленная компиляция / компоновка C ++?
Компиляция тривиальной программы "Hello World":
#include <iostream>
int main()
{
std::cout << "hello world" << std::endl;
}
... занимает 3 минуты (!) В этом незагруженном окне Windows 10 ( i7-6700 , 32 ГБ ОЗУ, приличный SATA SSD):
> 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
, которое не использует сколько-нибудь заметный ЦП или ввод / вывод в течение продолжительности.
Запуск дерева процессов g++
через API Monitor показывает, что в 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