You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Makefile报No rule to make target及NASM编译错误如何解决

错误逐个修复说明

1. 最初No rule to make target 'kernel-entry.asm', needed by 'kernel-entry.o'报错原因

  • 该报错和CFLAGS参数无关,核心原因是Makefile执行时,当前工作目录下不存在名为kernel-entry.asm的文件,可能是文件名拼写错误、大小写不符、文件存放在其他子目录未指定路径,你后续将原.c后缀的文件重命名为.asm解决了这个问题。
  • 你之前给NASM传入$(CFLAGS)是错误操作:-Wall -g是GCC的C语言编译参数,NASM不支持该类参数,所以会触发无效标识报错,移除该参数是正确操作。

2. warning: overriding recipe for target 'abc.bin'警告修复

你的Makefile中重复定义了两次abc.bin的编译规则,Make只会生效最后一次定义的规则,直接删除其中一个重复的abc.bin规则即可消除警告。

3. NASM参数-f elf -o的作用

两个参数都是NASM的合法参数,本次报错和参数无关:

  • -f elf:指定NASM输出的文件格式为ELF格式的可重定位目标文件(也就是常规的.o文件),该格式的文件可直接交给ld链接器做后续链接操作。
  • -o 文件名:指定NASM输出的文件名称,你当前输出为.bin后缀不符合命名规范,因为-f elf输出的不是纯二进制文件,建议修改为kernel-entry.o更合理。

4. kernel-entry.asm:2: error: invalid directive line报错原因

该报错指向你的汇编文件本身存在语法问题,和NASM参数无关:是kernel-entry.asm文件的第2行书写的汇编指令/伪指令不符合NASM的语法规范,比如误用了GAS汇编器的语法、伪指令拼写错误、符号书写不规范等,自行检查文件第2行内容即可修复。

5. Makefile其他逻辑问题

你当前的kernel.bin规则中依赖kernel-entry.bin,但你生成kernel-entry.bin时用-f elf输出的是ELF格式目标文件,后续交给ld链接是没问题的,但命名容易和-f bin输出的纯二进制文件混淆,建议统一将链接前的可重定位目标文件命名为.o后缀,避免逻辑混乱。

内容的提问来源于stack exchange,提问作者user786

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:15:00