GCC 链接慢是个很要命的问题。在 Windows 下使用 MinGW-w64 编译器时,项目稍大一些,链接就会变得非常慢,然而使用 MSVC 编译相同的代码时,链接用时都是毫秒级。网上搜索了一圈没有找到比较好的解决办法。
进一步了解到 GCC 4.7.0 开始支持 LTO(链接时间优化),信息来源是 这篇博客,但默认情况下是不开启 LTO 的。
Windows 下要启用这个功能很简单,做两件事:
- 把
MINGW-根目录\libexec\gcc\x86_64-w64-mingw32\8.1.0
下的liblto_plugin-0.dll
,复制到MINGW-根目录\lib\bfd-plugins
下(若目标文件夹不存在需要手动创建); - 增加编译器标志
-flto
,如果用 CMake 就在CMakeLists.txt
中加上:if(CMAKE_COMPILER_IS_GNUCXX) add_compile_options(-flto) endif(CMAKE_COMPILER_IS_GNUCXX)
我自己这样配置之后,链接过程明显加快,并且创建的可执行文件体积也小了很多。