这是我的makefile:
obj =init3.o initfunc.o descriptor.o disk.o
init:$(obj)
ld -o init.out $(obj)
init3.o:init3.asm
nasm -f aout init3.asm
initfunc.o:initfunc.asm
nasm -f aout initfunc.asm
descriptor.o:../lib/descriptor.asm
nasm -f aout ../lib/descriptor.asm
disk.o:../drive/disk.asm
nasm -f aout ../drive/disk.asm
他们编译完全没有错,但是当链接器开始链接时,出现错误:file not recognized: file format not recognized.
然后我使用-f elf
将每个文件更改为elf格式,错误仍然存在,我用谷歌搜索GUN链接器确实识别.out
格式,那么我的代码有什么问题?
答案 0 :(得分:1)
FWIW:在重新运行.o
之前删除make
个文件。调整编译器标志后很容易忘记这一点。 (我在这里谈论经验......)
说明:调整makefile
将不强制执行重新编译(除非您将makefile
本身指定为makefile
中每个规则的依赖项;甚至不是一个坏主意)。您有可能一遍又一遍地链接相同的旧对象文件。