为树莓派Pico配置交叉编译环境和工具链arm-none-eabi-gcc时可能会遇到的错误以及解决方案
本文是一个类似手册的文章,用来记录可能遇到的错误。你可以通过侧栏选择遇到的错误来查看详细信息。
No install step for ‘ELF2UF2Build’
遇到这种错误有两种原因:
- 安装了版本不对或者不完整的
arm-none-eabi-gcc; - 没有使用正确的 C/C++ 的编译器,导致编译出来的
elf2uf2不对;
第一种原因
一般出现在使用brew安装的情况,这时候用下面的命令卸载、清理掉brew安装的内容:
# 卸载arm-none-eabi-gcc
$ brew uninstall arm-none-eabi-gcc
# 清理掉一些下载文件
$ brew cleanup arm-none-eabi-gcc
# brew默认将二进制文件安装到/usr/local/bin/目录下,虽然前面卸载了,但是可能会有一些残留,手动删一下
$ sudo rm /usr/local/bin/arm-none-eabi-*
这时候再从官网下载安装即可。进入 Arm GNU Toolchain Downloads,用页面搜索功能搜一下“macOS”,因为链接太多了。选择你对应平台(就是处理器架构)的AArch32 bare-metal target (arm-none-eabi)中的链接点击下载。选择AArch32因为树莓派 Pico 的微控制器 RP2040 包含的 Arm Cortex M0 是 32 位的,也就是AArch32,如果你下成AArch64 bare-metal target (aarch64-none-elf)是没法编译的。
第二种原因
这种原因的解决方法就是设置环境变量CMAKE_C_COMPILER和CMAKE_CXX_COMPILER来让cmake知道选择哪个编译器作为 C 和 C++ 代码的编译器,不然会默认选择本地的 Clang 作为编译器,但是这种编译器是编译不出我们需要的程序的。
这时候有两种解决方案。
在你的 Shell 配置文件进行设置
这时候你可以选择在你的 Shell 配置文件中加入以下语句(后面的路径需要根据自己的设置进行修改):
export CC="/usr/local/bin/arm-none-eabi-gcc"
export CXX="/usr/local/bin/arm-none-eabi-g++"
或者
export CMAKE_C_COMPILER="/usr/local/bin/arm-none-eabi-gcc"
export CMAKE_CXX_COMPILER="/usr/local/bin/arm-none-eabi-g++"
然后使用source来激活这个更改,或者你也可以关闭终端再次打开。
在CMakeLists.txt中进行设置
你可以在 CMake 项目中的CMakeLists.txt配置文件中进行设置,在 project(...)之前加上下面几句话:
set(CMAKE_C_COMPILER /usr/local/bin/arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER /usr/local/bin/arm-none-eabi-g++)
然后清空构建目标目录build,再进行构建即可。
fatal error: cannot read spec file ‘nosys.specs’: No such file or directory,
fatal error: cannot read spec file ‘nosys.specs’: No such file or directory显示了读取不了nosys.specs文件,这可能是因为需要读取nosys.specs的时候,nosys.specs还未准备好。这种错误一般出现在使用make最后构建二进制文件的时候。解决方法就是使用make -j4(个人测试至少为4)来同时处理 4 个任务,这样这个错误就消失了。
连接错误
这种错误信息很多,主要表现为:编译错误,查看信息发现是ld或者arm-none-eabi-ld导致的。这是因为最后连接器使用的-isysroot参数错误,一般这种错误是因为连接到的是本地的 SDK,而不是Linux需要的.so文件。
这种错误需要在 CMake 项目中的CMakeLists.txt配置文件中、 project(...)之前加上下面几句话(后面的路径需要根据自己的设置进行修改):
set(CMAKE_SYSROOT /usr/local/lib/arm-none-eabi/bfd-plugins/libdep.so)
然后清空构建目录build,再次进行构建即可。
有些错误因为我没记笔记一时想不起来,后面想起来再进行补充。希望能帮到有需要的人~
相关文章:
为树莓派Pico配置交叉编译环境和工具链arm-none-eabi-gcc时可能会遇到的错误以及解决方案
本文是一个类似手册的文章,用来记录可能遇到的错误。你可以通过侧栏选择遇到的错误来查看详细信息。 No install step for ‘ELF2UF2Build’ 遇到这种错误有两种原因: 安装了版本不对或者不完整的arm-none-eabi-gcc;没有使用正确的 C/C 的…...
Yum 部署K8S集群
目录 1、准备环境 (温馨提示:尽量一次完成集群) 2.安装master节点 3、安装k8s-master上的node 4、安装配置k8s-node1节点 5、安装k8s-node2节点 6、为所有node节点配置flannel网络 7、配置docker开启加载防火墙规则允许转发数据 一. 环…...
初阶C语言-操作符详解(下)
🌞 “等春风得意,等时间嘉许!” 接下来,我们把操作符没学完的继续学完! 操作符详解 6.2sizeof和数组 7.关系操作符8.逻辑操作符9.条件操作符10.逗号表达式11.下标引用、函数调用和结构成员12.表达式求值12.1隐式类型转…...
reposync命令——下载yum仓库中全部的包到本地
reposync命令可以将远端yum仓库里面的包全部都下载到本地。这样构建自己的yum仓库,就不会遇到网络经常更新包而头疼的事情了。 reposync命令在软件包 yum-utils 里面,需要保证yum-utils已安装。 yum install yum-utils -y 常用参数 -r :指定…...
LC-杨辉三角
LC-杨辉三角 链接:https://leetcode.cn/problems/pascals-triangle/submissions/ 上图就是一个杨辉三角,每个数等于他左上角的数与右上角的数之和。 第一行就是一个1;第二行是两个1;第三行的2就是它肩膀上两个1之和,其余的类似。…...
Golang空结构体struct{}的作用是什么?
文章目录 占位符:通道标识:键集合:内存占用优化:总结: 在Go语言中,空结构体 struct{}是一种特殊的数据类型,它不占用任何内存空间。空结构体没有任何字段,也没有任何方法。尽管它看起…...
自然语言处理从入门到应用——LangChain:提示(Prompts)-[示例选择器(Example Selectors)]
分类目录:《自然语言处理从入门到应用》总目录 如果我们拥有大量的示例,我们可能需要选择在提示中包含哪些示例。ExampleSelector是负责执行此操作的类。 其基本接口定义如下所示: class BaseExampleSelector(ABC):"""Interf…...
【实战项目】c++实现基于reactor的高并发服务器
基于Reactor的高并发服务器,分为反应堆模型,多线程,I/O模型,服务器,Http请求和响应五部分 全局 反应堆模型 Channel 描述了文件描述符以及读写事件,以及对应的读写销毁回调函数,对应存储ar…...
Docker部署ElasticSearch7
前言 帮助小伙伴快速部署研发或测试环境进行学习测试。springboot版本需要与ElasticSearch版本想对应,不同版本api不一致,会产生异常调用的情况。 一、拉取镜像 这里选择固定版本7.15.2 docker pull docker.elastic.co/elasticsearch/elasticsearch:…...
【算法|数组】滑动窗口
算法|数组——滑动窗口 引入 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组,返回 0 。 示例…...
笙默考试管理系统-MyExamTest----codemirror(2)
笙默考试管理系统-MyExamTest----codemirror(2) 目录 一、 笙默考试管理系统-MyExamTest----codemirror 二、 笙默考试管理系统-MyExamTest----codemirror 三、 笙默考试管理系统-MyExamTest----codemirror 四、 笙默考试管理系统-MyExamTest---…...
一次面试下来Android Framework 层的源码就问了4轮
说起字节跳动的这次面试经历,真的是现在都让我感觉背脊发凉,简直被面试官折磨的太难受了。虽然已经工作了七年,但是也只是纯粹的在写业务,对底层并没有一个很深的认识,这次面试经历直接的让我感受到我和那些一线大厂开…...
知网期刊《中阿科技论坛》简介及投稿须知
知网期刊《中阿科技论坛》简介及投稿须知 主管单位:宁夏回族自治区科学技术厅 主办单位:宁夏回族自治区对外科技交流中心(中国一阿拉伯国家技术转移中心) 刊 期:月刊 国际刊号:ISSN 2096-7268 国内刊号:CN 64-…...
kafka是有序的吗?如何保证有序?
首先,Kafka无法保证消息的全局有序性,这是因为Kafka的设计中允许多个生产者并行地向同一个主题写入消息。而且,一个主题可能会被划分为多个分区,每个分区都可以在独立的生产者和消费者之间进行并行处理。因此,生产者将…...
centos 定时脚本检测tomcat是否启动,未启动情况下重新启动
编写脚本 tomcatMonitor.sh #!/bin/sh. /etc/profile . ~/.bash_profile#首先用ps -ef | grep tomcat 获得了tomcat进程信息,这样出来的结果中会包含grep本身, #因此通过 | grep -v grep 来排除grep本身,然后通过 awk {print $2}来打印出要…...
【Unity3D】消融特效
1 前言 选中物体消融特效中基于 Shader 实现了消融特效,本文将基于 Shader Graph 实现消融特效,两者原理一样,只是表达方式不同,另外,选中物体消融特效中通过 discard 丢弃片元,本文通过 alpha 测试丢弃片元…...
10.Eclipse配置Tomcat详细教程、如何使用Eclipse+tomcat创建并运行web项目
一、Tomcat的下载官网 -> 进入官网显示如图所示的界面,在下下载的是Tomcat9.0版本,你可以自己选一款 点击然后进入下面这个界面 最好是在你的D盘建立一个文件夹,把它解压在里面,文件夹名自己来吧,自己能知道里面装…...
MySQL索引1——索引基本概念与索引结构(B树、R树、Hash等)
目录 索引(INDEX)基本概念 索引结构分类 BTree树索引结构 Hash索引结构 Full-Text索引 R-Tree索引 索引(INDEX)基本概念 什么是索引 索引是帮助MySQL高效获取数据的有序数据结构 为数据库表中的某些列创建索引,就是对数据库表中某些列的值通过不同的数据结…...
2023-08-06力扣今日四题
链接: 剑指 Offer 59 - II. 队列的最大值 题意: 如题,要求O1给出数列的最大值 解: 类似滑动窗口 1 1 2 1 2用双端队列存储成2 2(每次从前面获取最大值,后面插入新数字)也就是第一个2覆盖了…...
Kubernetes入门 三、命令行工具 kubectl
目录 语法操作示例资源操作Pod 与集群资源类型与别名格式化输出 kubectl 是 Kubernetes 集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装和部署。 语法 使用以下语法从终端窗口运行 kubectl 命令: kub…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
