2013-12-19 118 views
-1

这个问题是类似于其他发布的约/bigobj问题,但是,这些并没有直接解决一般的编译器选项。这特别回答了编译器选项的一般问题,并且还处理单独的特定编译器选项的问题,甚至还会进一步链接其他类似问题,以便比其他问题更容易找到。如何编辑Microsoft Visual Studio 2013编译器开关?

我需要初始化超过16641个元素的结构。

#include "stdafx.h" 
    #include <iostream> 

    struct ArtificialIdiocy{ 
     double x, y, z; 
     double nx, ny, nz; 
    }; 

    int _tmain(int argc, _TCHAR* argv[]){ 
     ArtificialIdiocy objectArray[16641]; 

     objectArray[0].x = 1.012709; 
     objectArray[0].y = 0.069911; 
     objectArray[0].z = 1.010933; 
     objectArray[0].nx = 0.165410; 
     objectArray[0].ny = 0.883572; 
     objectArray[0].nz = -0.438063; 

     objectArray[1].x = -1.000000; 
     objectArray[1].y = 0.014457; 
     objectArray[1].z = 1.000000; 
     objectArray[1].nx = 0.179296; 
     objectArray[1].ny = 0.883511; 
     objectArray[1].nz = -0.432661; 

     objectArray[2].x = 1.000693; 
     objectArray[2].y = 0.011744; 
     objectArray[2].z = -1.000509; 
     objectArray[2].nx = 0.172582; 
     objectArray[2].ny = 0.897122; 
     objectArray[2].nz = -0.406629; 

//等等,等等....

 objectArray[16638].x = 0.969018; 
     objectArray[16638].y = 0.116736; 
     objectArray[16638].z = 0.967181; 
     objectArray[16638].nx = 0.437513; 
     objectArray[16638].ny = 0.782861; 
     objectArray[16638].nz = 0.442335; 

     objectArray[16639].x = 0.968575; 
     objectArray[16639].y = 0.105999; 
     objectArray[16639].z = 0.998326; 
     objectArray[16639].nx = 0.561235; 
     objectArray[16639].ny = 0.718528; 
     objectArray[16639].nz = 0.410718; 

     objectArray[16640].x = 0.999139; 
     objectArray[16640].y = 0.089730; 
     objectArray[16640].z = 0.997266; 
     objectArray[16640].nx = 0.608631; 
     objectArray[16640].ny = 0.688559; 
     objectArray[16640].nz = 0.394208; 

但MSVS2013编译器告诉我,我的结构有很多部分,并用一个错误,说明退出:

错误1错误C1128:段数超过目标文件格式限制:使用/ bigobj编译

如何编辑/添加“/ bigobj”编译器开关?

+6

这种诚实看起来像一个维护的噩梦等待最终在每日跆拳道。您至少应该将其移出到运行时加载的外部资源。 –

+0

@森林与树木我并不打算在完整的程序中使用它。这只是一个非常基本问题的例子。 :P我不想在示例中添加很多其他代码,因为这会为潜在的新程序员混淆问题。在现实的操作中,我打算把它作为一个更大的结构体中的构造函数的一部分,它存储在一个单独的头文件中。每个字符,对象等都将从这个头文件中初始化。 – JoryRFerrell

+1

当1024KB是常见的堆栈限制时,问题的主要部分可能是在堆栈中放置一个780KB阵列。 –

回答

1

对于MSVS快车2013,打开项目“属性页”,进入“C/C++”项目,然后再往里你看到的将是最后的选择,“命令线”。点击此处,并在“附加选项”文本框中添加任何附加开关。

在这种情况下,您将添加“/bigobj”,所有小写字母。

参见:

Penalty of the MSVS compiler flag /bigobj

Build issue with MSVS 2010 and the C++ standard

How to compile with /bigobj within Dymola (Modelica)

刚刚发现而连接这个问题给他人如下:

http://msdn.microsoft.com/en-us/library/ms173499%28v=VS.100%29.aspx

http://msdn.microsoft.com/en-us/library/8578y171.aspx

+4

这个问题的搜索优化是[目前正在讨论中](http://meta.stackexchange.com/questions/212752/strange-search-engine-optimization-in-answers) –