在该书配套的源代码中,有一个Makefile文件,其中有如下的编译命令:
head.o: head.S
gcc -E head.S > head.s
as $(ASFLAGS) -o head.o head.s
entry.o: entry.S
gcc -E entry.S > entry.s
as $(ASFLAGS) -o entry.o entry.s
须知在gcc中,文件的扩展名有特别的含义,以上编译命令中,head.S、head.s以及entry.S、entry.s的文件名都相同,导致编译过程出错,需要将后者的文件名修改成与前者的文件名不同,而不是仅仅是扩展名不同,如修改成下面的样子:
head.o: head.S
gcc -E head.S > mhead.s
as $(ASFLAGS) -o head.o mhead.s
entry.o: entry.S
gcc -E entry.S > tentry.s
as $(ASFLAGS) -o entry.o tentry.s
只要前后者的文件名不同,就能够编译成功!