汇编文件后缀名

汇编文件往往以 .s.S.asm 为后缀名。

通常情况下,Linux 是不关心文件后缀名的。

但是,某些应用程序有一些固定用法,比如 make 命令(如果不使用 -f 选项的话)通常会在当前目录下寻找名为 Makefile 文件,把它作为默认配置文件。

类似的,gcc 有时也会根据不同的后缀名做出不一样的行为,如:

对于 .c 和 .cpp 文件,gcc 分别当做 c 和 cpp 文件编译(c和cpp的语法强度是不一样的)

.S 与 .asm

同样一份代码

_start:
    jmp _start

文件名使用 start.Sstart.asm,gcc 就会产生不一样的行为:

gcc -m32 -g -o output/start.o -c start.asm
gcc: warning: start.asm: linker input file unused because linking not done
gcc -m32 -g -o output/start.o -c start.S

后缀名使用 .asm,在使用 gcc 进行编译时会有警告,且编译不通过。

后缀名使用 .S,就可以编译通过。

.S 与 .s

在内核代码中,汇编文件通常以 .S 为后缀名,.s 很少见到。

那是因为如果使用 .s 作为后缀名,很容易被 gcc -S foo.c 覆盖。

参考

file - 汇编文件 : Difference between . a .s .asm