1. RISC-V 工具链搭建与交叉编译环境验证
任务说明
在 x86_64 Linux 主机上安装 RISC-V GNU 工具链,交叉编译一个静态链接的 Hello World,并用 QEMU 用户态模拟器运行验证。核心链路:riscv64-linux-gnu-gcc 编译 → 生成 riscv64 静态 ELF → qemu-riscv64 执行。
环境与依赖
- 主机:Ubuntu/Debian x86_64(其他发行版替换包管理器命令)。
- 工具链:
gcc-riscv64-linux-gnu(提供riscv64-linux-gnu-gcc)。 - 模拟器:
qemu-user(提供qemu-riscv64)。
sudo apt update
sudo apt install -y gcc-riscv64-linux-gnu qemu-user
源码与编译
创建 hello.c,用 -static 静态链接,避免依赖目标机动态库,便于在 QEMU 中直接运行。
#include <stdio.h>
int main(void) {
printf("Hello, RISC-V!\n");
return 0;
}
riscv64-linux-gnu-gcc -static -o hello hello.c
file hello
file 应显示类似 ELF 64-bit LSB executable, UCB RISC-V,说明产物是 RISC-V 架构。
在 QEMU 中运行验证
qemu-riscv64 ./hello
预期输出(由代码逻辑唯一确定):
Hello, RISC-V!
通过判定标准
riscv64-linux-gnu-gcc --version与qemu-riscv64 --version均能正常输出版本信息。file hello输出包含RISC-V且为ELF 64-bit。qemu-riscv64 ./hello打印Hello, RISC-V!,退出码为 0(可用echo $?查看)。
常见问题
- 报
qemu-riscv64: command not found:确认已安装qemu-user,或使用完整路径/usr/bin/qemu-riscv64。 - 运行报动态链接错误:确认编译时加了
-static。 - 找不到交叉编译器:包名在不同发行版可能为
gcc-riscv64-linux-gnu或gcc-riscv64-unknown-linux-gnu,按实际包名安装。