我正在編譯VS2012和GCC(CodeBlocks)for Windows下的項目。 在VS2012上一切正常。在GCC我獲得以下編譯錯誤:GCC-無效的註冊使用
C:\Users\Piotrek\AppData\Local\Temp\ccfdl0Ye.s|164|Error: invalid use of register|
C:\Users\Piotrek\AppData\Local\Temp\ccfdl0Ye.s|166|Error: invalid use of register|
C:\Users\Piotrek\AppData\Local\Temp\ccfdl0Ye.s|221|Error: invalid use of register|
||=== Build finished: 3 errors, 14 warnings (0 minutes, 0 seconds) ===|
我使用的編譯器選項-fpermissive - 它應該有無關的錯誤。
我只是不明白爲什麼它指向Local Temp文件夾下的臨時文件,並說我使用了錯誤的寄存器?
有沒有人知道發生了什麼?
GCC實際上不是一個單一的程序,它是一組接一個地運行的程序。首先是預處理器,然後是實際的編譯器,編譯器生成彙編器代碼,彙編器將生成彙編器代碼,彙編器生成鏈接器用於創建最終可執行文件的目標文件。錯誤消息中提到的文件是生成的彙編程序文件。雖然這對你的問題沒有多大幫助,但我希望能解釋爲什麼你有這些臨時文件。 – 2013-02-25 12:26:39
@JoachimPileborg:看起來更像是一個編譯器bug。警告表明*潛在*語義錯誤,但如果彙編程序生成錯誤,則可能表示編譯器存在缺陷。 – 2013-02-25 12:36:40
我的第二個最好的選擇是彙編器和編譯器的標誌不匹配 - 這是一個生成代碼的例子。對於SSE和一個需要傳統的x86指令集。我最好的選擇是,代碼包含asm指令,VS2012採用英特爾語法,而gcc預計AT&T。 asm指令按原樣傳遞給'as'階段。 – 2013-02-25 12:42:53