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

树莓派4镜像开发如何修改Makefile解决blink未定义引用问题

解决方案

你遇到的Undefined Reference to 'blink'是链接阶段错误,原因是当前Makefile既没有编译src/dev-gpio.c生成目标文件,也没有将对应的目标文件加入最终的链接列表,按以下修改即可:

  • 新增dev-gpio.o的编译规则,明确依赖关系和编译参数
  • 修改最终二进制的依赖项,将dev-gpio.o加入依赖列表
  • 把dev-gpio.o加入链接命令的输入文件列表
  • 可同步简化clean规则,避免重复判断删除目标文件

修改后的完整Makefile

.PHONY: all build clean

# 新增dev-gpio.o到依赖列表
build/rapi-boot/eos-init.bin: build/obj/init.o build/obj/dev-gpio.o
    # 链接命令末尾新增dev-gpio.o
    aarch64-linux-gnu-gcc -o eos-init.elf -nostdlib -fno-pie -nostartfiles -ffreestanding -T linker.ld -e start build/obj/init.o build/obj/dev-gpio.o
    aarch64-linux-gnu-objcopy eos-init.elf -O binary -j .eos-* build/rapi-boot/eos-init.bin
    rm eos-init.elf

build/obj/init.o: src/init.c src/eos.h 
    aarch64-linux-gnu-gcc -o build/obj/init.o -c -fno-pie -ffreestanding src/init.c

# 新增dev-gpio.o的编译规则
build/obj/dev-gpio.o: src/dev-gpio.c src/eos.h
    aarch64-linux-gnu-gcc -o build/obj/dev-gpio.o -c -fno-pie -ffreestanding src/dev-gpio.c

build: build/rapi-boot/eos-init.bin
    dd if=/dev/zero of=build/eos.img count=100 bs=1M
    sudo losetup -D
    sudo losetup -fP build/eos.img
    printf "o\nn\np\n1\n\n\nt\nc\nw\n" | sudo fdisk /dev/loop0
    sudo losetup -o 1048576 /dev/loop1 /dev/loop0
    sudo mkfs.vfat -n EOS /dev/loop1
    sudo mount /dev/loop1 build/mnt
    sudo cp -r build/rapi-boot/* build/mnt/.
    sudo umount build/mnt
    sudo losetup -D

clean:
    if [ -f "build/rapi-boot/eos-init.bin" ]; then rm build/rapi-boot/eos-init.bin; fi
    if [ -f "build/eos.img" ]; then rm build/eos.img; fi
    # 简化目标文件删除逻辑,无需单独判断每个o文件
    rm -f build/obj/*.o

注意:Makefile中所有命令行的缩进必须是Tab字符,不能用空格代替,否则会触发语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:30:03