$arm-none-eabi-gcc --版本错误

$arm-none-eabi-gcc --版本错误

我正在使用 MX Linux 操作系统。我正在尝试使用 stm32f103c8t6 MCU。从 Warren gay 的用户手册《Beginning STM32》中,我按照手册成功安装了 stm32f103c8t6、libopencm3 和 FreeRTOS 的 git 克隆。

当我下载并解压 ARM CROSS Compiler 时,文件保存在 /opt/gcc-arm 文件夹下。

输入 arm-none-eabi-gcc --version 后,显示命令未找到错误。

进一步探测并输入 $ ls -l /opt/gcc-arm/bin 后,它会以以下格式以绿色列出arm-none-eabi-gcc

-rwxr-xr-x 2 1001 1001 1296976 2020年11月24日arm-none-eabi-gcc

类似地,“type gcc”命令给出的输出为“gcc is /usr/bin/gcc”,而不是“arm-none-eabi-gcc is hashed (/opt/gcc-arm/bin/gcc)”,正如用户手册中提到的那样。

并且“type arm-none-eabi-gcc”命令给出的输出为“未找到”

据我了解,文件的绿色意味着文件是可执行的,但我无法解释为什么计算机无法识别该命令。

最后一个 make 命令得到了以下响应。

user@mx:~/stm32f103c8t6
$ make
make -C libopencm3 TARGETS=stm32/f1
make[1]: Entering directory '/home/user/stm32f103c8t6/libopencm3'
  BUILD   lib/stm32/f1
  CC      adc.c
make[2]: arm-none-eabi-gcc: Command not found
make[2]: *** [../../Makefile.include:41: adc.o] Error 127
Failure building: lib/stm32/f1: code: 2
make[1]: *** [Makefile:79: lib] Error 1
make[1]: Leaving directory '/home/user/stm32f103c8t6/libopencm3'
make: *** [Makefile:38: libopencm3/lib/libopencm3_stm32f1.a] Error 2

答案1

[这应该是一条评论,但我没有这样的声誉]

看起来编译器的路径不在您的$PATH环境变量中。

为了确保一切正常,您应该使用绝对路径,或者:

/opt/gcc-arm/bin/arm-none-eabi-gcc

或者

cd /opt/gcc-arm/bin/
./arm-none-eabi-gcc #the ./ is necessary to execute from the current directory

如果有效(没有更多命令未找到错误),问题很容易解决:添加到你的(在你的主文件夹中,我假设你使用 bash 作为 shell,如果文件不是,.bashrc则发布命令的输出echo $SHELL不在那里):

PATH+=':/opt/gcc-arm/bin/'

然后. ~/.bashrc从当前 shell 执行(运行新编辑的文件)或简单地打开一个新终端,您现在应该能够找到该命令。

笔记

我假设您正在从 intel/AMD 机器进行交叉编译(架构应该是x86_64,您可以使用命令uname -m或更多信息找到它uname -a)。在这种情况下,您可以使用交叉编译器在 x86 机器上进行构建,并生成 ARM 可执行文件以在 stm32 机器上运行。

万一我做出了错误的假设并且您正在尝试运行交叉编译器stm32的话就不用了。交叉编译器的优点是,如果您想编译,可以在更强大的机器上完成繁重的工作,然后在小型嵌入式系统上运行它stm32无需依赖另一台计算机(即无需交叉编译)并且您在那里运行linux,然后只需使用本地gcc进行编译并在那里运行可执行文件即可。

笔记2

编译器臂-没有任何-eabi-gcc 旨在编译裸机代码(例如直接在嵌入式系统上运行的固件,而不是在 Linux 上运行),而 linux 的 gcc (或交叉编译器arm-操作系统-gnueabihf-gcc,例如)正在构建在 Linux 上运行的程序。

相关内容