这是我的 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
他们编译完全没有错误,但是当链接器开始链接时,出现错误:文件无法识别:文件格式无法识别。
然后我使用 -f elf
将每个文件更改为 elf 格式,错误仍然存在,我在谷歌上搜索到 GUN 链接器确实可以识别 .out
格式,那么有什么问题吗我的代码?
最佳答案
FWIW:在重新运行 make
之前删除您的 .o
文件。调整编译器标志后很容易忘记这一点。 (我是根据经验谈论的...)
说明:调整 makefile
将不会强制重新编译(除非您将 makefile
本身指定为 makefile 中每个规则的依赖项>makefile
;这甚至可能不是一个坏主意)。您很可能一遍又一遍地链接相同的旧目标文件。
关于assembly - GNU 链接器 : file not recognized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16635470/