C++ --- mingw编译提示too many sections…File too big

现象:

在Windows Qt下使用MingW编译,报错too many sections…File too big

当代码中使用了大量模板时,会导致编译出的OBJ文件巨大,编译器会报错,
  在MSVC下错误为 Fatal Error C1128
  在GNU C++下错误提示为 too many sectionsFile too big

原因:

这是因为默认情况下,对象文件最多可存放 65,536 (2^16) 个可寻址的节。 这种情况不管指定哪个目标平台。

大多数模块将从来不会生成包含节数超过 65,536 的 .obj 文件。 但是,计算机生成的代码或大量使用模板库的代码可能需要可存放更多节的 .obj 文件。

解决方法:(参考:cmake:MSVC,GNU解决bigobj问题

编译时加上-bigobj    /bigobj 可将地址容量增加至 4,294,967,296 (2^32)。

对于Visual Studio,可以右击工程文件->属性 打开属性页,在配置属性->C/C++->命令行中的“其他选项”中加入-bigobj。

 对于cmake项目:

#CMakeLists.txt
if
(CMAKE_COMPILER_IS_GNUCXX) #检查GNU是否支持-Wa,-mbig-obj include(CheckCXXCompilerFlag) check_cxx_compiler_flag("-Wa,-mbig-obj" GNU_BIG_OBJ_FLAG_ENABLE) message(STATUS GNU_BIG_OBJ_FLAG_ENABLE=${GNU_BIG_OBJ_FLAG_ENABLE}) endif() add_executable(...) target_compile_options(RTPS_Show PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/bigobj> $<$<AND:$<CXX_COMPILER_ID:GNU>,$<BOOL:${GNU_BIG_OBJ_FLAG_ENABLE}>>:-Wa,-mbig-obj> )

 

 ps:上面的解决方法并没有解决我的问题。因为在Visual Studio下编译是没这个问题的,所以最后选择把编译器换成了msvc。

 

posted on 2022-11-26 11:05  林西索  阅读(2600)  评论(0编辑  收藏  举报