You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu23.10下用gcc-13构建rocket-tools的兼容问题求助

解决rocket-chip v1.6与rocket-tools的版本兼容及编译矛盾问题

核心矛盾梳理

问题本质是rocket-chip v1.6的编译器版本要求和rocket-tools指定版本的编译兼容性不匹配:

  • rocket-chip v1.6需要gcc-11以上版本,但用gcc-13构建rocket-tools 2023.05.02时会触发fsf-binutils-gdb的悬空指针错误;
  • 用gcc-11能构建成功rocket-tools,但rocket-chip又因编译器版本过低报错;
  • 最新rocket-tools分支则存在riscv-pk的汇编指令兼容性问题。

具体解决方法

1. 匹配rocket-chip v1.6对应的rocket-tools兼容版本

rocket-chip v1.6发布于2022年,对应的rocket-tools推荐使用2022.06.02标签,该版本和gcc-11/gcc-12兼容性更好,同时满足rocket-chip的编译器版本要求:

git clone https://github.com/chipsalliance/rocket-tools.git
cd rocket-tools
git checkout 2022.06.02
git submodule update --init --recursive

2. 用gcc-12构建rocket-tools(兼顾两边需求)

Ubuntu 23.10自带gcc-12,这个版本既不会触发fsf-binutils-gdb的悬空指针错误,又能满足rocket-chip v1.6对编译器版本的最低要求:

  • 安装gcc-12:
    sudo apt install gcc-12 g++-12
    
  • 指定gcc-12构建rocket-tools:
    cd rocket-tools
    export CC=gcc-12
    export CXX=g++-12
    ./build.sh
    

3. 修复最新rocket-tools分支的riscv-pk汇编错误

如果一定要使用最新rocket-tools分支,需要手动修正riscv-pk的汇编语法:

  • 进入riscv-pk目录:
    cd rocket-tools/riscv-pk
    
  • 打开报错的汇编文件(通常是machine/entry.S),将其中的csrrw a0, mstatus, a0替换为兼容最新gcc的指令:
    # 替换前
    csrrw a0, mstatus, a0
    # 替换后
    csrrw a0, mstatus, x0
    
  • 重新执行构建:
    cd ..
    ./build.sh
    

4. 容器化环境彻底规避版本冲突

最省心的方式是使用官方容器镜像,直接跳过本地环境的版本适配:

# 拉取对应版本镜像
docker pull chipsalliance/rocket-chip:v1.6
# 进入容器开发环境
docker run -it --rm chipsalliance/rocket-chip:v1.6

内容的提问来源于stack exchange,提问作者Ali Abbasi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 21:27:40