学习ARM裸机过程中。
在linux-gcc 4.4.3编译器 进行arm-linux-ld命令链接时出现错误
__aeabi_uidivmod__aeabi_uidiv`问题
查询网上主要是不支持硬件除法,缺少libgcc.a等问题。

具体的解决方法如下:

方法1:

如下图执行make编译链接,执行链接步骤时报错.

main.o: In function `out_num':
main.c:(.text+0x140): undefined reference to `__aeabi_uidivmod'
main.c:(.text+0x170): undefined reference to `__aeabi_uidiv'

在这里插入图片描述
1.在makefile上面 添加链接libgcc.a路径
-lgcc -L /home/menhao/arm/opt/FriendlyARM/toolschain/4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3
例:

arm-linux-ld -Ttext 0 -Tdata 0xe80 start.o led.o uart.o lib1funcs.o my_printf.o main.o -o uart.elf -lgcc -L /home/menhao/arm/opt/FriendlyARM/toolschain/4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3

具体路径一般自己编译器安装路径。自己寻找一下。

2.修改后,再make一下会出现下面一个错误
__div0: raise
在这里插入图片描述
3.找到工程用到的任意一个C源文件中添加一个 raise 空函数

int raise(int a)
{
	return 0;
}

4.再make一下…生成了.bin文件…问题解决了。
在这里插入图片描述

方法2:

1.去对应库目录直接取得libgcc.a
在这里插入图片描述
2.和编译的文件放到一起 在makefile文件中直接一起链接上
在这里插入图片描述
3.同样找到工程用到的任意一个C源文件中添加一个 raise 空函数

int raise(int a)
{
	return 0;
}

4.同样没有问题
成功编译并连接。
在这里插入图片描述

烧录开发板没有任何问题运行正常。
在这里插入图片描述
到此结束

Logo

更多推荐