riscv交叉编译器版本问题

软件环境-ubuntu20.03,在系统按照以下的命令安装riscv交叉编译工具

  • sudo apt-get install g++-riscv64-linux-gnu binutils-riscv64-linux-gnu

安装完成后执行编译命令,对nemu进行编译

make ARCH=riscv32-nemu ALL=dummy run

结果出现以下的错误

cc1: error: ‘-march=rv32im zicsr’: unsupported isa subset ‘z’

谷歌搜索后发现,有人说是版本问题

Package gcc-riscv64-linux-gnu depends on gcc-10-riscv64-linux-gnu which is too old for the new binutils. GCC 10 gives an error:

cc1: error: ‘-march=rv64imac_zicsr_zifencei’: unsupported ISA subset ‘z

The cross compiler package needs a respin to match the new binutils.

考虑应该是ubuntu20.03版本的软件版本老了,去github上直接拉取最新的riscv-gnu-toolchain

git clone https://github.com/riscv-collab/riscv-gnu-toolchain.git

make linux

 make后发现下载的很慢,参考riscv-gnu-toolchain 交叉编译器如何构建? - 知乎

sudo apt-get install git autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf patchutils bc libexpat-dev libglib2.0-dev ninja-build zlib1g-dev pkg-config libboost-all-dev libtool libssl-dev libpixman-1-dev libpython-dev virtualenv libmount-dev libsdl2-dev
git clone https://gitee.com/mirrors/riscv-gnu-toolchain

cd riscv-gnu-toolchain

git clone -b riscv-gcc-10.2.0 https://gitee.com/mirrors/riscv-gcc

git clone https://gitee.com/mirrors/riscv-dejagnu

git clone -b riscv-glibc-2.29 https://gitee.com/mirrors/riscv-glibc

git clone https://gitee.com/mirrors/riscv-newlib

git clone -b riscv-binutils-2.35 https://gitee.com/mirrors/riscv-binutils-gdb riscv-binutils

git clone -b fsf-gdb-10.1-with-sim https://gitee.com/mirrors/riscv-binutils-gdb riscv-gdb

./configure --prefix=/opt/riscv

make linux -j4

安装完成后,继续执行make ARCH=riscv32-nemu ALL=dummy run,结果还是有错误,将nemu目录/ysyx-workbench/abstract-machine/scripts/isa/riscv.h中的riscv64-linux-gnu修改为riscv64-unknown-linux-gnu再次执行编译指令,成功!

此外,可能出现的问题

/usr/riscv64-linux-gnu/include/bits/wordsize.h:28:3: error: #error "rv32i-based targets are not supported"

 可以修改

--- /usr/riscv64-linux-gnu/include/bits/wordsize.h
+++ /usr/riscv64-linux-gnu/include/bits/wordsize.h
@@ -25,5 +25,5 @@
 #if __riscv_xlen == 64
 # define __WORDSIZE_TIME64_COMPAT32 1
 #else
-# error "rv32i-based targets are not supported"
+# define __WORDSIZE_TIME64_COMPAT32 0
 #endif

还有

/usr/riscv64-linux-gnu/include/gnu/stubs.h:8:11: fatal error: gnu/stubs-ilp32.h: No such file or directory

可以修改

--- /usr/riscv64-linux-gnu/include/gnu/stubs.h
+++ /usr/riscv64-linux-gnu/include/gnu/stubs.h
@@ -5,5 +5,5 @@
 #include <bits/wordsize.h>

 #if __WORDSIZE == 32 && defined __riscv_float_abi_soft
-# include <gnu/stubs-ilp32.h>
+//# include <gnu/stubs-ilp32.h>
 #endif

  • 24
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值