基本的谷歌搜索bigobj issue显示很多人遇到了Fatal Error C1128:“number of sections exceeded object file format limit : compile with /bigobj”这个错误。如果一个人在C++模板库中大量使用,例如Boost libraries或者CGAL libraries,那么这个错误出现的概率更高。
这个错误很奇怪,因为它给出了解决方案:设置编译器标志/bigobj
!
那么我的问题是:为什么这个标志不是默认设置的呢?一定有使用该标志的惩罚,否则它将被默认设置。MSDN上没有记录这个惩罚。有人有线索吗?
我提出这个问题是因为我想知道CGAL的配置系统是否应该默认设置/bigobj
。
/bigobj
的行为直接内置并且始终打开? - Ela782-Wa,-mbig-obj
。可能是因为gcc创建了较小的.obj文件或者有更大的大小限制。 - mr NAE/bigobj
选项将其“欺骗”为32位索引,但在2005年之前不支持该选项。 GCC工具链面临相同的限制,因此使用-Wa,-mbigobj
- 但可能会以不同的方式进行优化。 在MSVC中,使用字符串去重/GF
(/O1
,/O2
)将每个字符串放在自己的部分中,这可以显着增加节表大小。 - simon.watts