0

我試圖編譯我們的項目在Visual Studio 2010中使用2005編譯器,我偶然發現了這個奇怪的錯誤。VS2005 C++編譯器崩潰與/ Gd標誌

有一個這個特殊的文件,每當我嘗試從VS2010與「不發送」按鈕的「Microsoft(R)C/C++優化編譯器」錯誤對話框進行編譯時,崩潰編譯器。我研究了VS2010調用2005編譯器的方式,並注意到VS2005調用它的方式有些不同。於是我開始在每次嘗試之後嘗試編譯時逐一刪除這些差異,並且一旦我刪除/Gd標誌,文件就成功編譯。

查看編譯器文檔,該標誌控制調用約定並將其設置爲__cdecl,這是默認值。唯一的區別是在VS2005中它被省略了,但VS2010決定將它添加到命令行中,導致崩潰。

有沒有人遇到過這個問題,或者知道解決這個問題的方法?我似乎無法找到一種方法使VS2010從命令行下降/Gd,即使它是默認值。只有我能找到的是如何添加參數,而不是刪除。

謝謝。

+0

值得注意的是,鑑於/ Gd至少回到MSVC6。是否有衝突的調用約定標誌? – MSalters 2010-06-01 12:37:29

+0

事情是在這個文件中必須有非常特殊的代碼,當它給出隱式/ Gd標誌時會導致它崩潰。如果我想找到它,我必須開始評論代碼段。但我不確定它會幫助,即使我設法修復它在這個特定的文件,因爲我有更多。這就是爲什麼我試圖尋找一種解決方法,使其不首先使用/ Gd標誌。 – 2010-06-01 12:52:30

回答

1

假設您有一個很好的理由想要使用新的IDE及其編譯器的祖父母(我很好奇!),您可以在「C/C++」配置屬性的「高級」分支中更改調用約定的項目。
該列表框只給我三個選擇的值,但是當我手動刪除文本時,IDE會在沒有任何/ Gx開關的情況下調用編譯器 - 至少這就是「命令行」分支顯示的內容。

這可能是一個好主意,將問題歸結爲repro情況並聯系MS支持提供。他們可能已經有了針對該問題的修補程序,如果他們沒有,可能會在相對較短的時間內生成一個修補程序。由於他們的軟件中的錯誤是免費的(當編譯器崩潰而不是發出一個始終是編譯器錯誤的有意義的消息時),因此聯繫支持人員。

+0

令人驚歎的是,刪除文本框中的文本工作! (關於你的好奇心,那麼它是一個沒有道理的人 - 希望更好的智能感知;-)。當我有時間重新制作一個更簡單的場景時,我會提交一個錯誤。 – 2010-06-01 13:23:20

+0

@Idan:智能感知__worse__在VC10中?這將是一個壞消息......無論如何,如果你想要更好的Intellisense,請爲[Visual Assist](http://www.wholetomato.com/)花費每個席位的少量費用。這是非常值得的錢,你可以使用VC10,這是一個更好的編譯器。 (它支持右值引用,畢竟,它應該通過單純的重新編譯來加速你的代碼。)他們在他們的網站上有一個試用版下載。不過要注意的是:我還沒有看到開發者試了三天,並且不希望他的經理爲他購買它。 – sbi 2010-06-01 16:20:40