如何指定AS使用的链接器文件?

问题描述 投票:0回答:1

我正在尝试构建一个由单个程序集文件组成的应用程序。我编写了一个针对我的芯片的链接器文件,该芯片由 RISC-V CPU、ROM 和 RAM 组成。

我不知道如何告诉AS程序使用这个链接器文件。当尝试运行此 Makefile 时:

AS      = ./xpack-riscv-none-elf-gcc-14.2.0-1/bin/riscv-none-elf-as.exe
OBJCOPY = ./xpack-riscv-none-elf-gcc-14.2.0-1/bin/riscv-none-elf-objcopy.exe

all : main.asm
    $(AS) main.asm -o instr.elf -T linker.ld
    $(OBJCOPY) -O binary -j .text instr.elf instr.bin

我得到以下输出:

riscv-none-elf-as.exe: unrecognized option `-T'

将链接器文件传递给 AS 程序的正确方法是什么?

assembly gcc linker-errors gnu-assembler
1个回答
0
投票

解决方案:引用MadScientist:

“gcc 是一个前端,它调用所有(需要的)后端工具 正确的顺序。这可能包括预处理器、编译器、 汇编器和链接器(其中一些可能不会被调用,具体取决于 gcc 命令行参数)。后端工具从不互相调用: 他们根据命令行选项做一件事并退出。 ”

所以事实上我根本没有链接,链接器没有在我的 Makefile 中调用,因为 as.exe 根本不调用它。

这是现在可以使用的更新后的 Makefile,我更改了几处内容,但之前的 Makefile 中缺少的行是第 10 行,其中调用 $(LD) 中指定的链接器:

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
OBJDUMP = ./xpack-riscv-none-elf-gcc-14.2.0-1/bin/riscv-none-elf-objdump.exe

all : main.asm
ifeq ($(wildcard ./bin),)
    mkdir -p ./bin
endif
    $(AS) main.asm -o ./bin/main.o
    $(LD) -o ./bin/main.elf ./bin/main.o -T linker.ld
    $(OBJCOPY) -O binary -j .text ./bin/main.elf ./bin/instr.bin
    $(OBJCOPY) -O binary -j .rodata ./bin/main.elf ./bin/rodata.bin
    $(OBJDUMP) -D -M no-aliases ./bin/main.elf > ./bin/main.dasm

再次感谢大家。

© www.soinside.com 2019 - 2024. All rights reserved.