非常长的链接时间与-g和没有-DNDEBUG选项

时间:2017-11-08 13:59:45

标签: c++ gcc cmake linker g++

我正在构建第三方基于CMake的C ++项目。

在发布模式下构建项目只需几秒钟。链接阶段不到一秒钟(当make打印Linking CXX executable myproject.exe时)。

在调试模式下构建需要一分多钟。大部分时间都花在链接可执行文件上。即使在对代码进行最小更改后的后续构建期间也会发生这种情况。

与发布模式的区别似乎是-g选项与-O3 -DNDEBUG选项的区别。这种行为有望吗?我之前曾经做过类似规模的项目(~18k LOC),但我从未在调试和发布模式之间的编译时间上遇到过如此大的差异。

这需要50秒:

C:\msys64\mingw64\bin\g++.exe  -std=c++0x -Wall -Wextra -Wpointer-arith \
-Wcast-align -fstrict-aliasing -Wno-unused-local-typedefs -fvisibility- \
inlines-hidden -march=native -g   -Wl,--whole-archive \
CMakeFiles\myproject.dir/objects.a -Wl,--no-whole-archive \
-o myproject.exe -Wl,--major-image-version,0,--minor-image-version,0 \
@CMakeFiles\myproject.dir\linklibs.rsp

1 个答案:

答案 0 :(得分:4)

不幸的是,大型项目的链接时间可能非常慢,尤其是在调试模式下。通常有帮助的事情

  • 将项目拆分为共享库(例如由LLVM开发人员完成)
  • 在SSD(或tmpfs)上链接
  • 使用Gold链接器而不是默认的BFD链接器(或者甚至LLD,因为它变得更稳定)