构建问题与2010年MSVS和C ++标准(Build issue with MSVS 2010 a

2019-06-24 09:29发布

我试图建立,使用MSVS在2010以下的git发现这个项目:

https://github.com/Joonhwan/exprtk

问题是,当我注释掉exprtk.hpp文件中的行48“的#define exprtk_lean_and_mean”,我得到以下编译器错误:

Error   1   error C1128: number of sections exceeded object file format limit : compile with /bigobj

谷歌搜索的错误,似乎预示着编译的翻译单元编制的东西比arbitariy限制较大,并添加“bigobj”命令行应该可以解决这个问题(它不会)。 编译与海湾合作委员会(4.3)的代码,工作无故障。

我的问题是:

  1. 请问C ++的地方就可以在翻译单元中有类型的数量是否有限制?

  2. 是代码在这个项目不好的做法是布局方式? (谷歌搜索时,我注意到有很多Boost库有同样的问题,如:Boost.Sprit)

Answer 1:

请问C ++的地方就可以在翻译单元中有类型的数量是否有限制?

请注意,这些参数的最大值保持打开特定实现。 该标准只强制要求必须由实现支持的最低要求。 一个实现将记录它支持的最大值,在这种情况下MSVC实现这样做。

这些在C ++标准的特殊部分中定义。

附件B -实施数量

  1. 因为计算机是有限的,C ++实现方式不可避免地在它们可以成功地处理的程序的大小的限制。 每次执行应记录如果知道了这些限制。 这个文件也可以举固定在那里的存在,说如何计算变量限制为可用资源的功能,或者说是固定的限制是不存在的或未知的限制。

  2. 的限制可能限制数量时,其包括以下的那些或其它描述。 以下各量的方括号内的数目被推荐为最小为该数量。 然而,这些量仅仅是指导,并不确定是否合规。
    - 复合语句,迭代控制结构和选择控制结构[256]的嵌套层次。
    - 条件包含[256]的嵌套层次。
    - 指针,数组和函数声明(以任何组合)修饰的算术,结构,联合或不完整的声明[256]型。
    - 一个完整的表达[256]内括号表达式的嵌套层次。
    - 字符在内部标识符或宏名称[1 024]编号。
    - 在外部标识符[1 024]的字符数。
    - 在一个转换单元的外部标识符[65 536]。
    - 与块范围标识符在一个块[1 024]声明。
    - 宏标识符同时在一个转换单元[65 536]中定义。
    - 参数的一个函数定义[256]。
    - 参数在一个函数调用[256] **。
    - 参数在一个宏定义[256]。
    - 参数在一个宏调用[256]。
    - 在一个逻辑源极线[65 536]特征。
    - 在一个字符串的字符文字或宽字符串文字(串联后)[65 536]。
    - 一个对象[262 144]的大小
    - #include文件嵌套层数[256]。
    - case标签switch语句(不包括对任何嵌套switch语句)[16 384]。
    - 在一个类,结构,或联合数据成员[16 384]。
    - 在一个单一的枚举枚举常数[4 096]。
    - 嵌套类,结构,或联合定义的在一个单一的结构声明列表[256]水平。
    - atexit注册的功能()[32]。
    - 直接和间接的基类[16 384]。
    - 用于单个类[1024]直接基类。
    - 会员在一个类[4 096]声明。
    - 在一个类最终压倒一切的虚函数,访问或不[16 384]。
    - 一类[1 024]的直接和间接虚拟基。
    - 类的静态成员[1 024]。
    - 在一类朋友的声明[4 096]。
    - 在一个类中的访问控制声明[4 096]。
    - 在构造函数中定义成员初始化[6 144]。
    - 一个标识符的范围资格[256]。
    - 嵌套外部规范[1 024]。
    - 在模板声明[1024]模板参数。
    - 以递归嵌套的模板实例[17]。
    - 每try块[256]处理程序。
    - 在单个函数声明[256]掷规格。



Answer 2:

的限制是由旧版本MSVC和相应的接头的使用OBJ格式内。 因此,尽管这种限制是任意它不能进行对编译器的新版本的默认行为。 退房的说明/ bigobj选项:

那之前出厂的Visual C ++ 2005链接器无法读取的obj制作与/ bigobj的文件。



文章来源: Build issue with MSVS 2010 and the C++ standard