现象:

在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。

 

原文地址:http://www.cnblogs.com/linxisuo/p/16926976.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性