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 .
终于成功!

相关文章:
RISC-V GNU Toolchain 工具链安装问题解决(含 stdio.h 问题解决)
我的安装过程主要参照 riscv-collab/riscv-gnu-toolchain 的官方 Readme 和这位佬的博客:RSIC-V工具链介绍及其安装教程 - 风正豪 (大佬的博客写的非常详细,唯一不足就是 sudo make linux -jxx 是全部小写。) 工具链前前后后我装了…...
[C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
关于C版本帧差法可以参考博客 [C]OpenCV基于帧差法的运动检测-CSDN博客https://blog.csdn.net/FL1768317420/article/details/137397811?spm1001.2014.3001.5501 我们将参考C版本转成opencvsharp版本。 帧差法,也叫做帧间差分法,这里引用百度百科上的…...
Android Studio学习8——点击事件
在xml代码中绑定 在java代码中绑定 弹出一个toast 随机,数组...
微软detours代码借鉴点备注
comeasy 借鉴点1 Loadlibray的时间选择 注入库wrotei.dll,为了获取istream的接口,需要loadlibrary,但是在dllmain中是不建议这样做的。因此,动态库在dllmain的时候直接挂载了comeasy.exe的入口 //获取入口 TrueEntryPoint (i…...
【c++】类和对象(七)
🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章来到类和对象的最后一部分 目录 1.static成员1.1特性 2.友元2.1引入:<<和>>的重载2.2友元函数2.3友元类 3.内部类4.匿名对象5.拷…...
oracle pdb从12.1迁移到19.20
oracle pdb从12.1迁移到19.20 1 unplug (12c的环境执行) SQL> alter pluggable database VINCENT_TEST close immediate; SQL> alter pluggable database VINCENT_TEST unplug into /u01/backup/temp_20240401/VINCENT_TEST.xml;2 plug …...
[Python GUI PyQt] PyQt5快速入门
PyQt5快速入门 PyQt5的快速入门0. 写在前面1. 思维导图2. 第一个PyQt5的应用程序3. PyQt5的常用基本控件和布局3.1 PyQt5的常用基本控件3.1.1 按钮控件 QPushButton3.1.2 文本标签控件 QLabel3.1.3 单行输入框控件 QLineEdit3.1.4 A Quick Widgets Demo 3.2 PyQt5的常用基本控件…...
vue3中播放flv流视频,以及组件封装超全
实现以上功能的播放,只需要传入一个流的地址即可,当然组件也只有简单的实时播放功能 下面直接上组件 里面的flvjs通过npm i flv.js直接下载 <template><div class"player" style"position: relative;"><p style&…...
【浅尝C++】继承机制=>虚基表/菱形虚继承/继承的概念、定义/基类与派生类对象赋值转换/派生类的默认成员函数等详解
🏠专栏介绍:浅尝C专栏是用于记录C语法基础、STL及内存剖析等。 🎯每日格言:每日努力一点点,技术变化看得见。 文章目录 继承的概念及定义继承的概念继承的定义定义格式继承关系与访问限定符 基类和派生类对象赋值转换继…...
tomcat中的web项目配置指引
文章目录 目录结构I server.xml 配置文件1.1 Host标签1.2 contex标签1.3 server.xml 的端口配置1.4 appBase和docBase的区别1.5 Engine标签1.6 Connector标签II Tomcat应用的配置2.1 配置虚拟路径2.2 配置连接数2.3 使用线程池2.4 配置内存大小III 预备知识...
如果你正在投简历,一定要试试这款AI工具!
今天给大家分享一款AI简历神器 - BitBitFly AI 简历助手,这个工具可以帮助大家快速、精准投简历,并且提供职位匹配度分析报告,提供专业优化简历建议提高简历和职位匹配度,轻松拿下offer。 如果你在找工作的时候遇到以下问题&…...
Unity:2D SpriteShape
1.1 简介 Sprite Shape 可以很灵活的更改sprite的轮廓。比如: 它由两部分组成:Sprite Shape Profile、Sprite Shape Controller,需要导入2D Sprite Shape Package. 1.1.1 Sprite导入要求 Texture Type - ‘Sprite (2D and UI)’.Sprite Mo…...
Web大并发集群部署之集群介绍
一、传统web访问模型 传统web访问模型完成一次请求的步骤 1)用户发起请求 2)服务器接受请求 3)服务器处理请求(压力最大) 4)服务器响应请求 传统模型缺点 单点故障; 单台服务器资源有限&…...
Linux_进程的优先级环境变量上下文切换
文章目录 一、进程的优先级二、进程的四个重要概念三、上下文切换四、环境变量4.1 查看当前shell环境下的环境变量与内容 一、进程的优先级 什么是优先级? 指定一个进程获取某种资源的先后顺序本质是进程获取cpu资源的优先顺序 为什么要有优先级 进程访问的资源&am…...
【Rust】语言特点介绍
Rust 教程 Rust 语言是一种高效、可靠的通用高级语言。其高效不仅限于开发效率,它的执行效率也是令人称赞的,是一种少有的兼顾开发效率和执行效率的语言。 Rust 语言由 Mozilla 开发,最早发布于 2014 年 9 月。Rust 的编译器是在 MIT Licens…...
接口冒烟测试方法
接口冒烟测试方法 今年遇到了几个问题,与接口的功能和性能相关,恰巧最近公司也在组织以冒烟测试为主题的活动,于是乎突发奇想,寻思着能否将接口测试与冒烟测试结合起来,发掘一些新的接口测试思路与方法。 平时对接口…...
Redis 全景图(3)--- Redis 应用于缓存
前言 这是关于 Redis 全景图的最后一篇文章。因为一次写太多会限流,我也是没办法,才分成三篇文章来写。这篇文章是关于 Redis 应用于缓存的。 其实为什么要讲这个话题呢? Redis 应用在很多地方呀,为什么一定要挑着这个话题来讲呢…...
vue中splice方法总结
本文没有目录,很简单的几句话总结一下 1,参数解释2,使用方法 splice(index,len,item)是vue中对数组进行操作的方法之一,可以用来 删除, 更新,和 增加数组内容。 1,参数解释 index:…...
【HTML】CSS样式(二)
上一篇我们学习了CSS基本样式和选择器,相信大家对于样式的使用有了初步认知。 本篇我们继续来学习CSS中的扩展选择器及CSS继承性,如何使用这些扩展选择器更好的帮助我们美化页面。 下一篇我们将会学习CSS中常用的属性。 喜欢的 【点赞】【关注】【收藏】…...
Java 学习和实践笔记(51):二分法查找(折半检索)
二分法查找(折半检索)又叫binary search. 要在一堆数据中查找是否存在某一个已知数,二分法查找的步骤: 第一步,对数据实现排序 第二步,将该数与排序后的数据集的中间一个数进行比较 第三步,…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
