【问题标题】:Compiling a very large .cpp file编译一个非常大的 .cpp 文件
【发布时间】:2013-07-09 13:56:49
【问题描述】:

没有真正答案的类似问题适用于我的案例:CLICK
我在这里问之前研究过的问题 - CLICK

我正在使用 MinGW64 尝试编译一个非常大的 .cpp 文件(>13k 行),但我也可以访问 Visual Studio 2010 - 如果有人有使用它的解决方案,请随时告诉我。
我在组装阶段发现了一个错误 -

... too many sections (33396)
C:\Users\username\AppData\Local\Temp\ccnAocvD.s: Assembler messages:
C:\Users\username\AppData\Local\Temp\ccnAocvD.s: Fatal error: can't write 
CMakeFiles/source.dir/sourcecode.cpp.obj: File too big

按照我的两位同事的建议,我目前正在使用 -Os--param ggc-min-expand=0--param ggc-min-heapsize=4096 运行编译 - 现在编译运行已超过 5 小时。

更新:

根据某些人的建议,我将把文件拆分为 2 个源文件并为它们创建一个标头 - 谢谢。

第二次更新:

编译尚未完成(5 天!!!),即使在创建标题并将文件拆分为 4 个较小的文件之后也是如此。

决赛

这个问题仍然没有解决 - 即使在听从每个发布者的建议之后,我仍然无法编译这个。

【问题讨论】:

  • “分离那些相互调用的方法”有什么问题,这是正常的 C/C++ 文件结构
  • 好吧,我有一个名为 foo 的方法,它在内部调用方法 bar - 如果我将 foo 放入 file1.cpp 并将 bar 放入 file2.cpp 我会收到编译错误。跨度>
  • 对我来说,13K 行似乎并不大。你确定这不是你的文件做一些奇怪的事情 - 例如永远递归地包含同一个文件,或者类似的东西?
  • @startfish re foo and bar 你需要一个头文件来声明缺少的函数
  • 对原始文件进行“二分搜索”:分成两半并分别编译。除非有几个问题,否则一半应该编译得相当快,而另一半应该会卡住。以同样的方式继续 - 分成两半等 - 直到找到有问题的代码。

标签: c++ compilation compiler-optimization mingw-w64


【解决方案1】:

不确定 GCC,但您是否尝试过 VisualStudio 中该特定文件的 /bigobj 标志?
我对一个大文件有同样的问题,它实际上解决了这个问题。所以值得一试。

来自 MSDN:

默认情况下,一个目标文件最多可以容纳 65,536 (2^16) 个可寻址部分。无论指定哪个目标平台都是如此。 /bigobj 将地址容量增加到 4,294,967,296 (2^32)

更多关于这个here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多