【问题标题】:mingw "too many sections" bug while compiling huge header file in Qt在 Qt 中编译巨大的头文件时出现“太多部分”错误
【发布时间】:2015-08-08 05:36:25
【问题描述】:

我试图在 Qt (win7) 上使用 mingw32(491_32) 编译 exprtk.hpp 文件 (https://exprtk.codeplex.com/)。 在编译过程中,我给出了这个错误信息:

debug\main.o:-1: error: too many sections (35325)

我注意到 exprtk.hpp 文件很大(>32000 行)。 我一直在尝试编译器上的优化标志,但它没有帮助。 如果有人帮助我,我将不胜感激... 问候,

【问题讨论】:

  • 我认为“bigobj”标志可以解决我的问题,但我的编译器无法识别这个标志。

标签: c++ qt compiler-errors


【解决方案1】:

您可以通过添加编译标志-flto -Wl,-allow-multiple-definition 并且您可以添加-fuse-linker-plugin

-Wa,-mbig-obj 不适用于x86/32bits 架构(仅限x64

【讨论】:

  • 为我工作。只需要-fto 选项。我还必须将我的所有类方法分成单独的编译单元 (.cpp)。非常感谢。
【解决方案2】:

如此庞大的仅标头代码已经是糟糕的设计,我宁愿推荐使用另一个库,例如muParser

您的问题已经在其他帖子中讨论过,例如this

正如您已经注意到的,将 /bigobj 传递给 Microsoft 的编译器 导致它输出具有多达 2^31 个部分的 munged COFF 格式, “对任何人来说都应该足够了。”

我已经用 MinGW-w64 测试了这个新选项,它可以工作。你需要 将 -Wa,-mbig-obj 传递给 gcc 以选择加入大对象(-Wa 表示通过 这个选项给汇编器)。 ——弗朗西斯·加涅

【讨论】:

  • 谢谢,首先我测试了 -Wa, -mbig-obj 选项,但没有成功。其次,我正在寻找一个支持“逻辑操作”、“控制和循环结构”的库。
  • @Mosi 这已经不仅仅是一个数学解析器应该提供的了,你应该添加一个轻量级的脚本语言,比如Lua
  • -Wa,-mbig-obj 选项对我不起作用(无效选项),但上一篇文章 (Shaheryar.Akram) 解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多