arm-GCC编译asm文件

arm-GCC to compile asm file

我正在尝试使用 GCC 编译一个简单的 "asm" 文件以了解编译过程。 test.h:

#define APPLICATION_EXIT .end

test.asm:

#include "test.h"
APPLICATION_EXIT

当我 运行 :

arm-none-eabi-gcc-9.2.1.exe -mcpu=cortex-m7 -mthumb -g -c .\test.asm

我得到了:

arm-none-eabi-gcc-9.2.1.exe: warning: .\test.asm: linker input file unused because linking not done

但是没有生成任何内容,没有“输出”文件。 我试着 运行

arm-none-eabi-as -mcpu=cortex-m7 -mthumb -g -c .\test.asm

我得到了:

.\test.asm: Assembler messages:
.\test.asm:2: Error: bad instruction `application_exit'

看起来 AS 有效,但宏无效。 当我将 test.asm 更改为 :

#include "test.h"
.end

arm-none-eabi-as -mcpu=cortex-m7 -mthumb -g -c .\test.asm 作品。我得到了 a.out.

我是不是用错了GCC?为什么 Gcc 无法直接 运行 后端 "as"? 为什么#define 宏不起作用? 非常感谢,我感谢任何评论。

您可以在 the gcc manual 中看到哪些文件扩展名被识别。 .asm 未列出,因为 Unix 中的汇编语言源文件传统上被命名为 .s,或者如果要通过 C预处理器。 (C 样式宏和包含扩展由 C 预处理器处理,而不是由汇编程序本身处理,这就是为什么当您直接 运行 as 时它不起作用。)

无法识别的文件被假定为要传递给链接器的目标文件,但由于您指定了 -c,链接器不是 运行,因此 gcc认为无事可做。

您可以重命名文件以 .S 结尾,或者使用选项 -x assembler-with-cpp 明确告诉 gcc 如何处理该文件。或者,您可以先在文件上 运行 cpp 来展开宏和包含,然后在结果输出上 运行 as(或通过管道将一个输入另一个)。