輕鬆搞死VS2008的C++編譯器,error PRJ0002,優化編譯器遇到問題需要關閉

yab1109發表於2012-07-23

這兩天被一個編譯器異常崩潰的問題弄的很頭疼,不知道問題,跟到了出錯的檔案,也沒發現問題,最後在網上找到了跟我有相同經歷的TX,(百度找完了找google,最終找到的)最後分享出來,方便更多的人能夠搜尋到。遇到問題可以儘快解決。。。

 

有個VS2005的VC++工程可以正常編譯,轉換到VS2008下編譯,編譯器出錯崩潰了,錯誤提示大概如下:

error PRJ0002 : 錯誤的結果 1 (從“C:/Program Files/Microsoft Visual Studio 9.0/VC/bin/cl.exe”返回)

 

剛開始很莫名其妙,後來追蹤到編譯器崩潰前編譯的最後一個原始檔,

經過逐一註釋檔案中的程式碼段,終於發現,只要出現下面這樣的語句,就可以令VS2008的C++編譯器崩潰:

fprintf(fp,"%s %d/n","cl.exe會崩潰");   //缺少對應的整型引數導致編譯器cl.exe崩潰

 

我的測試貌似就是這樣的,上面函式多加一個引數他就不會崩潰,額,這個真的很神奇,應該算是編譯器的bug吧

 

【補記】

經過最新測試發現:原來是VC8(VS2005)的專案預設屬性有開/Wp64 (檢測64位可移植性問題),

在VC9(VS2008)下面,如果仍然開啟/Wp64編譯選項,那麼遇到上述這種程式碼編譯器就會崩潰,

如果在專案屬性裡禁止"檢測64位可移植性問題"(/Wp64 )這個選項,則編譯就可以正常通過,編譯器不會崩潰。

 

總結:VC8的專案轉換到VC9,如果沒有關閉/Wp64編譯選項,那麼如果遇到下面這種語句,編譯器就會崩潰.

fprintf(fp,"%s %d/n","/Wp64開啟,cl.exe會崩潰");   //缺少對應的整型引數導致編譯器cl.exe崩潰

 

有圖有真相,崩潰的截圖如下:

 

相關文章