当前位置: 首页 > news >正文

RISC-V GNU Toolchain 工具链安装问题解决(含 stdio.h 问题解决)

我的安装过程主要参照 riscv-collab/riscv-gnu-toolchain 的官方 Readme 和这位佬的博客:RSIC-V工具链介绍及其安装教程 - 风正豪 (大佬的博客写的非常详细,唯一不足就是 sudo make linux -jxx 是全部小写。)
工具链前前后后我装了快5遍了,这篇博客主要是遇到的问题解决方案分享。

submodule 克隆失败

当然如果大家按照上面的博客中的虚拟机魔法配置方法修改上网后,克隆应该不会出问题。不过我自己采取更保险的方式是,根据根目录中的 .gitmodules 文件,在每个文件夹里分别手动克隆并切换分支 / 版本。(下面其中部分代码由于个人习惯我改为了 ssh 地址)

[submodule "binutils"]path = binutilsurl = https://sourceware.org/git/binutils-gdb.gitbranch = binutils-2_42-branch
[submodule "gcc"]path = gccurl = https://gcc.gnu.org/git/gcc.gitbranch = releases/gcc-13
[submodule "glibc"]path = glibcurl = https://sourceware.org/git/glibc.git
[submodule "dejagnu"]path = dejagnuurl = https://git.savannah.gnu.org/git/dejagnu.gitbranch = master
[submodule "newlib"]path = newliburl = https://sourceware.org/git/newlib-cygwin.gitbranch = master
[submodule "gdb"]path = gdburl = https://sourceware.org/git/binutils-gdb.gitbranch = gdb-14-branch
[submodule "qemu"]path = qemuurl = https://gitlab.com/qemu-project/qemu.git
[submodule "musl"]path = muslurl = https://git.musl-libc.org/git/muslbranch = master
[submodule "spike"]path = spikeurl = git@github.com:riscv-software-src/riscv-isa-sim.gitbranch = master
[submodule "pk"]path = pkurl = git@github.com:riscv-software-src/riscv-pk.gitbranch = master
[submodule "llvm"]path = llvmurl = git@github.com:llvm/llvm-project.gitbranch = release/17.x

比如:

cd pk
git clone git@github.com:riscv-software-src/riscv-pk.git
git checkout release/17.x

再根据官网版本号切换:
在这里插入图片描述

git reset --hard 2efabd3

最后执行 git submodule update --init 的时候其实相当于一个校验的过程。

stdio.h 找不到的问题

臭名昭著的问题。
其实本质原因在于我们用的不是自己编译安装的这个工具链,而是 ubuntu apt 下载的 gcc-riscv64-unknown-elf ,这个东西自从 ubuntu20 版本之后应该就有问题(头文件找不全)。可以通过 whereis riscv64-unknown-elf-gcc 查看我们使用工具链的优先级。
我们自己编译安装的工具链位于:/opt/riscv/bin
ubuntu apt 安装的工具链位于:/usr/bin
如图,这是我执行 riscv64-unknown-elf-gcc -v hello.c 时的部分输出信息:
在这里插入图片描述
正常来说 stdio.h 应该是在红框中的 /usr/riscv64-unknown-elf/include 里,但是 ubuntu 安装的时候缺少这个内容所以很多同学都遇到了这个工具链无法使用的问题。我们不要用它,用我们自己编译出来的 /opt/riscv/bin 里的工具链。只需要执行 sudo apt remove gcc-riscv64-unknown-elf 后重新打开窗口即可。
可以参考这个 issue 的讨论:stdio.h 头文件找不到 其中给出的另一种解决方式是使用另一款 ubuntu apt 安装的工具链:sudo apt install gcc-riscv64-linux-gnu ,其实这两种工具链我们的 riscv-gnu-toolchain 里面都有。
简单来说就是:
ubuntu 安装 newlib 工具链:sudo apt install gcc-riscv64-unknown-elf 用不了,报错 stdio.h 找不到
ubuntu 安装 linux 工具链:sudo apt install gcc-riscv64-linux-gnu 能用
但是我们自己编译的 riscv-gnu-toolchain 里面这两种都有,我建议要么就都用我们自己的,要么就只用 ubuntu 安装的 gcc-riscv64-linux-gnu .
终于成功!
在这里插入图片描述

http://www.lryc.cn/news/332627.html

相关文章:

  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
  • Android Studio学习8——点击事件
  • 微软detours代码借鉴点备注
  • 【c++】类和对象(七)
  • oracle pdb从12.1迁移到19.20
  • [Python GUI PyQt] PyQt5快速入门
  • vue3中播放flv流视频,以及组件封装超全
  • 【浅尝C++】继承机制=>虚基表/菱形虚继承/继承的概念、定义/基类与派生类对象赋值转换/派生类的默认成员函数等详解
  • tomcat中的web项目配置指引
  • 如果你正在投简历,一定要试试这款AI工具!
  • Unity:2D SpriteShape
  • Web大并发集群部署之集群介绍
  • Linux_进程的优先级环境变量上下文切换
  • 【Rust】语言特点介绍
  • 接口冒烟测试方法
  • Redis 全景图(3)--- Redis 应用于缓存
  • vue中splice方法总结
  • 【HTML】CSS样式(二)
  • Java 学习和实践笔记(51):二分法查找(折半检索)
  • echarts 地图 自己圈地图 乡镇街道
  • 12-1-CSS 常用样式属性
  • 微信小程序短链接工具推荐
  • [Spring Cloud] gateway全局异常捕捉统一返回值
  • 网络基础二——TCP可靠性实现机制补充2
  • SSM项目实战——哈哈音乐(四)前台模块开发
  • Hadoop-入门
  • HarmonyOS(鸿蒙)——单击事件
  • c# wpf template itemtemplate+dataGrid
  • 总结UDP协议各类知识点
  • 设计模式 --5观察者模式