方法一:使用预编译工具链(推荐)
1. 下载预编译工具链
# 创建工具链目录
mkdir -p ~/riscv
cd ~/riscv
# 下载官方预编译工具链(选择适合的版本)
# 对于 Ubuntu/Debian 系统,推荐使用 SiFive 的工具链
wget https://github.com/sifive/freedom-tools/releases/download/v2020.08.2/freedom-tools-2020.08.2-linux-x86_64.tar.gz
# 或者使用 RISC-V 官方工具链
wget https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2023.12.18/riscv64-elf-ubuntu-22.04-nightly-2023.12.18-nightly.tar.gz
# 解压
tar -xzf freedom-tools-2020.08.2-linux-x86_64.tar.gz
# 或者
tar -xzf riscv64-elf-ubuntu-22.04-nightly-2023.12.18-nightly.tar.gz
2. 设置环境变量
# 编辑 ~/.bashrc 文件
nano ~/.bashrc
# 在文件末尾添加(根据你的实际路径修改)
export PATH=$PATH:$HOME/riscv/freedom-tools/v2020.08.2/bin
# 或者
export PATH=$PATH:$HOME/riscv/riscv64-elf/bin
# 使配置生效
source ~/.bashrc
方法二:从源码编译工具链(功能最全)
1. 安装依赖
# 更新系统
sudo apt update
# 安装编译依赖
sudo apt install -y autoconf automake autotools-dev curl python3 \
libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex \
texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev git \
ninja-build
2. 下载源码并编译
# 克隆 RISC-V GNU 工具链仓库(注意:需要较长时间和大量磁盘空间)
git clone --recursive https://github.com/riscv-collab/riscv-gnu-toolchain
# 进入目录
cd riscv-gnu-toolchain
# 配置编译选项(选择需要的变体)
# 64位架构,支持多种扩展
./configure --prefix=/opt/riscv --enable-multilib
# 或者编译特定配置
./configure --prefix=/opt/riscv --with-arch=rv64gc --with-abi=lp64d
# 开始编译(使用多个核心加速,这会花费较长时间)
make -j$(nproc)
方法三:使用包管理器安装
1. 添加 RISC-V 工具链 PPA(仅限 Ubuntu 22.04+)
# 添加 RISC-V 工具链 PPA
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
# 安装 RISC-V 工具链
sudo apt install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu
# 安装裸机开发工具链
sudo apt install gcc-riscv64-unknown-elf g++-riscv64-unknown-elf
验证安装
# 检查工具链版本
riscv64-unknown-elf-gcc --version
# 或者
riscv64-linux-gnu-gcc --version
# 测试编译一个简单的程序
cat > hello.c << 'EOF'
#include <stdio.h>
int main() {
printf("Hello RISC-V!\n");
return 0;
}
EOF
# 编译(根据你的工具链名称调整)
riscv64-unknown-elf-gcc -o hello hello.c
# 查看文件信息
file hello
创建交叉编译的 CMake 工具链文件
# riscv64.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR riscv64)
# 指定交叉编译器
set(CMAKE_C_COMPILER riscv64-unknown-elf-gcc)
set(CMAKE_CXX_COMPILER riscv64-unknown-elf-g++)
# 指定目标架构
set(CMAKE_C_FLAGS "-march=rv64gc -mabi=lp64d")
set(CMAKE_CXX_FLAGS "-march=rv64gc -mabi=lp64d")
QEMU 模拟器安装(用于测试)
# 安装 QEMU RISC-V 模拟器
sudo apt install qemu-system-riscv64 qemu-user-static
# 运行测试程序(使用用户模式模拟)
qemu-riscv64 ./hello
常见问题解决
1. 缺少库文件
# 如果遇到找不到库的错误,安装必要的库
sudo apt install libc6-dev-riscv64-cross
2. 权限问题
# 如果安装在 /opt 目录,可能需要添加用户到组
sudo chmod -R 755 /opt/riscv
3. 编译错误
- 确保有足够的磁盘空间(至少 20GB)
- 确保网络稳定,git submodule 需要完整下载
- 如果编译失败,尝试减少并行编译数量:
make -j2
推荐配置
对于优麒麟用户,推荐使用:
初学者:使用方法一的预编译工具链
开发者:使用方法二从源码编译,获得完整功能
快速体验:使用方法三的包管理器安装
选择哪种方法取决于你的具体需求。预编译工具链最方便,源码编译最灵活但耗时最长。