解决uboot编译问题__aeabi_uidivmod'和o `__aeabi_uidiv'没定义的错误

undefined reference to `__aeabi_uidivmod‘和undefined reference to `__aeabi_uidiv‘ 这个错误在uboot的编译过程中很容易出现

先分析这个原因 :

这两个函数算是lib函数 具体应用在除法应用 如果程序中使用了 ‘/’ ‘%’这些运算 那就要用到这两个函数了

最简单的解决办法就是将程序中的除法都改用移位运算避免使用底层库

这里增加一个讨论为什么有些程序同样有除运算却没有这个错误提示

这就是编译器的深层问题了:

Uboot是个非GNU/Linux的程序,不是一个系统 而是一个裸机程序

而交叉编译器arm-XXX-linux-gnueabi是GNU/Linux工具链,是可以正常编译Linux内核等东西的,市区编译系统的    系统里面就带有了libc  ulibc 这些库函数

但是去编译非GNU/Linux的Uboot的话,就会出现:

当出现被0除的情况时,会调用__aeabi_ldiv0(即eabi版本的__div0),当在GNU/Linux系统中时,其会去触发系统的SIGFPE,进而调用到对应的raise(3)函数。

而此处,由于Uboot不是Linux类程序,没有对应的raise()函数,所以报错找不到。

这里提供另一种的解决方法就是在 对应的lowlevelinit.s中增加需要调用的那个raise()函数

这个raise()直接写个空的就可以了

这里提供一个例子:

.globlraise

raise:

nop

mov pc, lr

在makefile里面加上 一个库   libgcc.a   这个库里面有这两个函数的具体实现,这样就支持浮点运算了

解决uboot编译问题__aeabi_uidivmod'和o `__aeabi_uidiv'没定义的错误

时间: 2024-10-30 22:30:17

解决uboot编译问题__aeabi_uidivmod'和o `__aeabi_uidiv'没定义的错误的相关文章

解决:编译CM14.1 提示Jack “Out of memory error”错误

Android 7.1编译到33%时出现JDK内存溢出的错误: Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-[email protected])). GC overhead limit exceeded. Try increasing heap size with java option '-Xmx<size>'. W

解决 Windows 编译 Fast R-CNN 的 bbox 和 nms 出现的错误 error: Unable to find vcvarsall.bat

在 Windows 下安装一个底层的 Python 包时(Fast R-CNN 的 bbox 和 nms),遇到 error: Unable to find vcvarsall.bat 错误,看到这个错误信息的第一感觉就是跟编译器相关的.网上说安装一个 Python Tools for Visual Studio 就可以了. 打开 VS 2017 的安装程序,选择修改,把 Python 支持勾选上,进行安装. 再进行安装,以为可以了,新的问题又出现了:error: command 'C:\Pro

OK335xS U-boot 编译问题&amp;无Linux shell 问题

/************************************************************************** * OK335xS U-boot 编译问题&无Linux shell 问题 * 声明: * 主要是因为系统之前是由本人师傅做的,他去掉了一些信息,同时由于他本人 * 目前不在旁边,在参考一些文件的时候出现以下情况. * * 2015-7-17 阴 深圳 南山平山村 曾剑锋 *************************************

Linux嵌入式驱动学习之路④u-boot编译分析

u-boot编译分析 在配置完成后,执行make开始编译.这里打开Makefile. 首先包含在配置时生成的config.mk all: sinclude $(obj)include/autoconf.mk.dep sinclude $(obj)include/autoconf.mk # load ARCH, BOARD, and CPU configuration include $(obj)include/config.mk //配置时生成的 export ARCH CPU BOARD VE

解决Cygwin编译cocos2dx 遇到的 error: &#39;UINT64_C&#39; was not declared in this scope 问题

环境工具:Win10.VS2013.cocos2d-x-2.2.6.Cygwin.ADT 问题来源:写了一个小游戏,VS2013上运行成功,就尝试着打包apk,项目导入到ADT里面,添加了cocos2dx lib库以后,讨厌的红x消失,下来就是在cygwin里面预编译得到xxx.so文件了,但是问题来了,报错!!! jni/../../Classes/GameLayer.cpp:227:46: error: 'UINT64_C' was not declared in this scope 怎么

解决ndk编译lua时遇到 undefined reference to &#39;__srget&#39;的问题

今天用ndk r10d版本编译lua时,遇到几个错误,提示没有找到__srget 没有定义,于是看了国外的大神的解决方法, 是因为ndk在r10c之后的版本已经将getc函数屏蔽了,所以导致编译器找不到,只能用比较就得ndk去编译,笔者用 ndk r10b成功编译.附上r10b的下载地址:http://pan.baidu.com/s/1boUO775 转载请注明出处, from 博客园HemJohn 解决ndk编译lua时遇到 undefined reference to '__srget'的问

mini2440 U-boot 编译

U-boot 编译 by HYH | 2018 年 1 月 1 日 上午 9:59 一 . 说明 1. 下载 git clone  git://repo.or.cz/w/u-boot-openmoko/mini2440.git 备用:git clonehttps://github.com/HEYAHONG/u-boot_mini2440.git 2 .  要求 系统中安装有正常的编译工具链(gcc,make),也安装有编译arm的编译工具链. 二. 编译 1 .配置 进入下载后的目录后,运行ma

基于TI AM335x创龙开发板U-Boot编译

分享一下基于广州创龙TL335x-IDK开发板的U-Boot编译.希望能帮助上你. 板子特点如下: ? 基于 TI AM335x ARM Cortex-A8 CPU,主频可高达 1GHz,运算能力可高达 2000DMIPS,搭配DDR3,兼容 eMMC 和 NAND FLASH,超高性价比: ? 2 个 PRU 协处理器,支持 EtherCAT.PROFINET.EtherNet/IP.PROFIBUS.Ethernet POWERLINK.Sercos 等工业协议: ? 内部集成 SGX530

10.24工作笔记——解决linux_jni编译报错问题

公司在用opus开源库,所以遇到了一些问题. 我将新下载的opus1.1替换掉老版本之后,单独编译opus没问题,可是编译相关的文件就会报错. 错误信息如下: g++ -Wall -fPIC -shared libusc_jni.o libusc.a ../api/libopus.a ../api/libspeex.a ../api/libamrnb.a ../api/libpcre.a -o libusc_jni.so -L. -lusc /usr/bin/ld: ../api/libopus