2013-12-19 151 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) –