我正在编译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