解决undefined reference to `__aeabi_uidivmod‘和undefined reference to `__aeabi_uidiv‘错误

Posted smartvxworks

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决undefined reference to `__aeabi_uidivmod‘和undefined reference to `__aeabi_uidiv‘错误相关的知识,希望对你有一定的参考价值。

自己写裸机驱动程序时,使用了除法,在链接的时候出了如下错误:

使用的编译器是:

后来上网搜了一下原因,由于编译器不支持除法运算,但是也没有搜到解决方案。看了一下代码确实用到了除法,把除法去掉可以正常连接通过。后来想了想了,之前编译内核和编译u_boot都是这个编译器的呀,他们肯定有除法运算呀,他们是怎么做到的呢?

于是看了一下u_boot的Makefile,很晕,东西很多,后来编译了一下,看到了这个:

u_boot在链接的时候,指定了黄色颜色的路径和-lgcc选项(-l后面的是链接库的名字)

到指定的目录下看到如下内容:

里面有一个libgcc.a的静态库,编译器支持软浮点,猜想软浮点的实现应该就是在找个静态库中。

在自己的Makefile里面加上了这些东西,继续编译连接出现如下错误信息:

缺少"raise符号",在u_boot源码中搜索"raise"如下:

是一个函数,什么也没干,我在自己的代码中写了一个这样的空函数,编译通过。

Makefile 如下:

总结:

    ARMv4t的ARM核不支持浮点运算,为了让其支持浮点运算,编译器使用了软浮点的方法,但是需要相应的除法库支持,在连接的时候需要指定其路径和库名。

    一句经典名言: 在IT行业,遇到问题,只要一直解决,总有解决的一天。

以上是关于解决undefined reference to `__aeabi_uidivmod‘和undefined reference to `__aeabi_uidiv‘错误的主要内容,如果未能解决你的问题,请参考以下文章

c语言中undefined reference to ""怎么解决

undefined reference to `sin'问题解决

解决undefined reference to `__aeabi_uidivmod‘和undefined reference to `__aeabi_uidiv‘错误

undefined reference to error解决方法

[转]"undefined reference to" 问题解决方法

"undefined reference to" 多种可能出现的问题解决方法