riscv-gnu-toolchain 编译出 riscv64-unknown-linux-gnu-gcc

本文档详细记录了在Linux环境下构建RISC-V的GNU工具链的过程,包括克隆源码、配置、编译以及设置环境变量。在编译过程中遇到的`as: unrecognized option '--64'`错误,通过调整配置选项和环境变量得到了解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考https://zhuanlan.zhihu.com/p/258394849
$ mkdir ~/work/riscv64-linux -p
$ sudo mkdir /opt/riscv64
$ cd ~/work/riscv64-linux
$ git clone https://gitee.com/mirrors/riscv-gnu-toolchain
$ cd riscv-gnu-toolchain
$ git rm qemu
$ git submodule update --init --recursive
$ echo $?
$ ./configure --prefix=/opt/riscv64 2>&1 | tee log_config
$ echo $?
$ sudo make linux 2>&1 | tee log_build
$ echo $?
$ export PATH="$PATH:/opt/riscv64/bin"
$ riscv64-unknown-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=riscv64-unknown-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/opt/riscv64/libexec/gcc/riscv64-unknown-linux-gnu/11.1.0/lto-wrapper
Target: riscv64-unknown-linux-gnu
Configured with: /home/suweishuai/work/riscv64-linux/riscv-gnu-toolchain/riscv-gcc/configure \--target=riscv64-unknown-linux-gnu --prefix=/opt/riscv64 \
--with-sysroot=/opt/riscv64/sysroot --with-pkgversion=g --with-system-zlib --enable-shared --enable-tls --enable-languages=c,c++,fortran --disable-libmudflap \
--disable-libssp --disable-libquadmath --disable-libsanitizer --disable-nls \
--disable-bootstrap --src=.././riscv-gcc --disable-multilib --with-abi=lp64d \
--with-arch=rv64imafdc --with-tune=rocket --with-isa-spec=2.2 'CFLAGS_FOR_TARGET=-O2  \
-mcmodel=medlow' 'CXXFLAGS_FOR_TARGET=-O2   -mcmodel=medlow'
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 11.1.0 (g) 
$ which riscv64-unknown-linux-gnu-gcc 
/opt/riscv64/bin/riscv64-unknown-linux-gnu-gcc

$ ls /opt/riscv64/bin/
riscv64-unknown-linux-gnu-addr2line   riscv64-unknown-linux-gnu-gdb
riscv64-unknown-linux-gnu-ar          riscv64-unknown-linux-gnu-gdb-add-index
riscv64-unknown-linux-gnu-as          riscv64-unknown-linux-gnu-gfortran
riscv64-unknown-linux-gnu-c++         riscv64-unknown-linux-gnu-gprof
riscv64-unknown-linux-gnu-c++filt     riscv64-unknown-linux-gnu-ld
riscv64-unknown-linux-gnu-cpp         riscv64-unknown-linux-gnu-ld.bfd
riscv64-unknown-linux-gnu-elfedit     riscv64-unknown-linux-gnu-lto-dump
riscv64-unknown-linux-gnu-g++         riscv64-unknown-linux-gnu-nm
riscv64-unknown-linux-gnu-gcc         riscv64-unknown-linux-gnu-objcopy
riscv64-unknown-linux-gnu-gcc-11.1.0  riscv64-unknown-linux-gnu-objdump
riscv64-unknown-linux-gnu-gcc-ar      riscv64-unknown-linux-gnu-ranlib
riscv64-unknown-linux-gnu-gcc-nm      riscv64-unknown-linux-gnu-readelf
riscv64-unknown-linux-gnu-gcc-ranlib  riscv64-unknown-linux-gnu-run
riscv64-unknown-linux-gnu-gcov        riscv64-unknown-linux-gnu-size
riscv64-unknown-linux-gnu-gcov-dump   riscv64-unknown-linux-gnu-strings
riscv64-unknown-linux-gnu-gcov-tool   riscv64-unknown-linux-gnu-strip
$ riscv64-unknown-linux-gnu-gcc -Q --help=target
The following options are target specific:
  -mabi=                                lp64d
  -malign-data=                         xlen
  -march=                               rv64imafdc
  -mbig-endian                          [disabled]
  -mbionic                              [disabled]
  -mbranch-cost=N                       3
  -mcmodel=                             medlow
  -mcpu=PROCESSOR             
  -mdiv                                 [enabled]
  -mexplicit-relocs                     [enabled]
  -mfdiv                                [enabled]
  -mglibc                               [enabled]
  -misa-spec=                           2.2
  -mlittle-endian                       [enabled]
  -mmusl                                [disabled]
  -mplt                                 [enabled]
  -mpreferred-stack-boundary=           0
  -mrelax                               [enabled]
  -mriscv-attribute                     [disabled]
  -msave-restore                        [disabled]
  -mshorten-memrefs                     [enabled]
  -msmall-data-limit=N                  8
  -mstack-protector-guard-offset= 
  -mstack-protector-guard-reg= 
  -mstack-protector-guard=              global
  -mstrict-align                        [enabled]
  -mtune=PROCESSOR                      rocket
  -muclibc                              [disabled]

  Supported ABIs (for use with the -mabi= option):
    ilp32 ilp32d ilp32e ilp32f lp64 lp64d lp64f

  Known code models (for use with the -mcmodel= option):
    medany medlow

  Supported ISA specs (for use with the -misa-spec= option):
    2.2 20190608 20191213

  Known data alignment choices (for use with the -malign-data= option):
    natural xlen

  Valid arguments to -mstack-protector-guard=:
    global tls

可能出现的错误及解决方案

/opt/riscv64/riscv64-unknown-linux-gnu/bin/as: unrecognized option '--64'
https://groups.google.com/a/groups.riscv.org/g/sw-dev/c/G0MJSSQzZpE
https://stackoverflow.com/questions/42205916/as-unrecognized-option-64
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=7589
  • 解决方案
./configure --with-as=/usr/bin/as
但是 upstream 已经不支持--with-as 了 :  unrecognized options: --with-as
解决方案:
	export PATH=/usr/bin/:$PATH
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值