如何为RISC-V汇编器AS指定链接脚本文件?
问题解决方法
你出错的核心原因:riscv-none-elf-as是汇编器,它仅负责将汇编代码转换为目标文件,不支持-T选项——这个选项是给链接器(riscv-none-elf-ld)使用的,用来指定链接脚本。
正确的构建流程需要分两步:先汇编生成目标文件,再用链接器配合链接脚本生成ELF文件。修改后的Makefile如下:
AS = ./xpack-riscv-none-elf-gcc-14.2.0-1/bin/riscv-none-elf-as.exe LD = ./xpack-riscv-none-elf-gcc-14.2.0-1/bin/riscv-none-elf-ld.exe OBJCOPY = ./xpack-riscv-none-elf-gcc-14.2.0-1/bin/riscv-none-elf-objcopy.exe all : main.asm $(AS) main.asm -o main.o $(LD) main.o -o instr.elf -T linker.ld $(OBJCOPY) -O binary -j .text instr.elf instr.bin
如果觉得单独调用链接器太繁琐,也可以直接用riscv-none-elf-gcc完成汇编+链接的一站式流程,它会自动调用汇编器和链接器,同样支持-T选项指定链接脚本,简化后的Makefile如下:
GCC = ./xpack-riscv-none-elf-gcc-14.2.0-1/bin/riscv-none-elf-gcc.exe OBJCOPY = ./xpack-riscv-none-elf-gcc-14.2.0-1/bin/riscv-none-elf-objcopy.exe all : main.asm $(GCC) main.asm -o instr.elf -T linker.ld -nostdlib -static $(OBJCOPY) -O binary -j .text instr.elf instr.bin
这里的-nostdlib -static是为了避免gcc自动链接嵌入式场景不需要的标准库。
内容的提问来源于stack exchange,提问作者user12312425
相关产品推荐
相关产品推荐

