树莓派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
相关产品推荐
相关产品推荐

