解决方法:编译IMX6ULL裸机串口程序提示错误arm-none-eabi-ld: cannot find -lgcc: 没有那个文件或目
2025-02-24 来源:jianshu
一、问题
编译IMX6ULL野火裸机串口程序出现错误:
make[1]: 进入目录“/home/leung/embed_linux_driver_tutorial_imx6_code-master/bare_metal/uart/device”
arm-none-eabi-gcc -fno-builtin -I/home/leung/embed_linux_driver_tutorial_imx6_code-master/bare_metal/uart/include -c led.c
arm-none-eabi-gcc -fno-builtin -I/home/leung/embed_linux_driver_tutorial_imx6_code-master/bare_metal/uart/include -c system_MCIMX6Y2.c
arm-none-eabi-gcc -fno-builtin -I/home/leung/embed_linux_driver_tutorial_imx6_code-master/bare_metal/uart/include -c clock.c
arm-none-eabi-gcc -fno-builtin -I/home/leung/embed_linux_driver_tutorial_imx6_code-master/bare_metal/uart/include -c uart.c
arm-none-eabi-ld -r led.o system_MCIMX6Y2.o clock.o uart.o -o device.o
make[1]: 离开目录“/home/leung/embed_linux_driver_tutorial_imx6_code-master/bare_metal/uart/device”
arm-none-eabi-ld -Tbase.lds start.o main.o device/device.o -o base.elf -static -L /usr/lib/gcc/arm-none-eabi/6.3.1 -lgcc
arm-none-eabi-ld: cannot find -lgcc: 没有那个文件或目录
make: *** [makefile:9:all] 错误 1

二、原因
因为arm-none-eabi-gcc的版本比较高,不支持以上指令。
查看当前gcc版本:
arm-none-eabi-gcc -v
当前版本为10.3.1

三、解决方法
3.1 下载Linaro GCC
Linaro 是一间由ARM发起,与其它ARM SOC公司共同投资的非盈利性质的开放源代码软件工程公司,Linaro 开发了很多软件,最著名的就是 Linaro GCC 编译工具链(编译器)。
官网下载:
【老版本,稳定版】https://releases.linaro.org/components/toolchain/binaries/
【新版本,开发版】https://snapshots.linaro.org/gnu-toolchain/
百度网盘:https://pan.baidu.com/s/1w7-PwMcCwXZpOhjfQYFxQg?pwd=2jh0 提取码:2jh0
选择版本号

选择ARM架构类型

选择具体的编译器平台

创建存放编译器的目录
sudo mkdir /usr/local/arm将编译器复制到刚刚的目录
sudo cp gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ -f将编译器工具进行解压
sudo tar -vxf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz修改环境变量,使编译器永久生效
使用 VI 打开/etc/profile 文件:
sudo vi /etc/profile
打开/etc/profile 以后,在最后面输入如下所示内容:
export PATH=$PATH:/usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin
修改好以后就保存退出,重启系统,交叉编译工具链(编译器)就安装成功了
sudo reboot安装完成后使用如下命令查看版本
arm-linux-gnueabihf-gcc –v
如果是Linaro 4.9的老版本编译器,还需要安装额外的库
sudo apt-get install lsb-core lib32stdc++6
3.2 修改makefile
使用 VIM 打开/embed_linux_driver_tutorial_imx6_code-master/bare_metal/uart/makefile 文件:
vim makefile将 libgcc_address := /usr/lib/gcc/arm-none-eabi/6.3.1 修改为 /usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/7.5.0
修改后:
出现其他错误 undefined reference to `raise'
arm-none-eabi-ld -Tbase.lds start.o main.o device/device.o -o base.elf -static -L /usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/7.5.0 -lgcc
arm-none-eabi-ld: /usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/7.5.0/libgcc.a(_dvmd_lnx.o): in function `__aeabi_ldiv0':
/home/tcwg-buildslave/workspace/tcwg-make-release_1/snapshots/gcc.git~linaro-7.5-2019.12/libgcc/config/arm/lib1funcs.S:1545: undefined reference to `raise'
make: *** [makefile:9:all] 错误 1
在main.c中添加以下函数
int raise(void){
return 0;}重新编译成功

- 使用Makefile在Windows环境下编译STM32F103C8T6标准库工程,脱离Keil的指南
- Keil环境下配置GCC编译器以开发STM32 C语言项目:探讨C语言特性及第23条指南
- VS Code开发51单片机【代码+编译+烧录】
- vs2022 makefile 开发编译 stm32
- 解决IAR编译出现Warning[25]: Label \'xxx\' is defined pubweak in a section implicitly declared root警告的办法
- 编译IMX6ULL开发板的Uboot和内核(一)
- stm8系列--加载别人的工程编译错误
- 使用VS Code进行STM32单片机开发(创建工程、编译、调试)
- Keil5 STM32 C++开发 ARM V6编译器的使用教程
- Clion开发STM32添加文件后编译报错“No such file or directory“
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 蓝牙信道探测技术原理与开发套件实践
- Microchip 推出生产就绪型全栈边缘 AI 解决方案,赋能MCU和MPU实现 智能实时决策
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析




