为树莓派Pico配置交叉编译环境和工具链arm-none-eabi-gcc时可能会遇到的错误以及解决方案

本文是一个类似手册的文章,用来记录可能遇到的错误。你可以通过侧栏选择遇到的错误来查看详细信息。

No install step for ‘ELF2UF2Build’

遇到这种错误有两种原因:

  1. 安装了版本不对或者不完整的arm-none-eabi-gcc
  2. 没有使用正确的 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_COMPILERCMAKE_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,交叉编译)