有-g和没有-DNDEBUG选项的链接时间很长

Very long linking time with -g and without -DNDEBUG options

本文关键字:链接 时间 选项 -DNDEBUG      更新时间:2023-10-16

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

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

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

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

这需要50秒:

C:\msys64\mingw64\bin\g++.exe-std=C++0x-Wall-Wextra-Wpointer arith-Wcast-align-fstrict alising-Wno未使用的本地类型defs-fvisibility-inlines hidden-march=native-g-Wl,--整个存档CMakeFiles\myproject.dir/objects.a-Wl,-没有整个存档-o myproject.exe-Wl,--主映像版本,0,--次映像版本,0@CMakeFiles\my project.dir\linklibs.rss

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

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