有-g和没有-DNDEBUG选项的链接时间很长
Very long linking time with -g and without -DNDEBUG options
我正在构建一个基于第三方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,因为它越来越稳定)
相关文章:
- C++链接时间资源"allocation"而不定义
- 构造函数的链接时间自动注册
- C++ 使用链接时间替换进行单元测试
- 使用LTO静态链接的可执行文件(链接时间优化):如何使用以前构建的库进行制作
- 在NDK中启用链接时间优化时,链接器错误
- 如何使用MINGW-W64通过链接时间优化构建QT
- 在链接时间插入字符串
- Incredibuild大大增加了链接时间
- 每次捕获测试框架较长的链接时间
- 有-g和没有-DNDEBUG选项的链接时间很长
- std::嵌入增加的链接时间
- 类类型的静态constexpr字段在g++中给出链接时间错误
- 标志以将IPDB和IOBJ文件从链接时间代码生成优化(LTCG)移动
- 在Windows上使用GCC的链接时间优化构建wxWidgets DLL时出错
- gcc 5.1 中的链接时间优化是否足以放弃内联简单函数
- 使用未命名的名称空间会减少链接时间吗
- 如何进行llvm链接时间优化
- 库中的链接时间优化
- Clang链接时间优化与替换的操作员新的原因不匹配的自由()/删除在valgrind
- 是否可以启用链接时间优化,同时仅禁用某些函数的严格混叠