lib1funcs.asm undefined reference to raise'

本文提供了解决Uboot编译错误的方法,包括使用非GNU/Linux的交叉编译器重新编译,或者在低级初始化文件中添加raise函数。详细步骤包括找到特定的汇编文件并进行相应修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在board/目录/platform.S (老版本uboot)中最后,加入:

或board/目录/lowlevel_init.S(新版本)中最后,加入:

.globl raise
raise:
   nop
   mov pc, lr



附上别人的说明

解决办法是:

两种:

1.去用其他对应的配置(估计是用于指定是非GUN/Linux类程序的),重新编译一个新版本的交叉编译器,然后用新的非GNU/Linux的交叉编译器,去编译此旧版本的uboot,即可正常编译

2.修改自己的uboot,加上对应的(随便写个空的)__aeabi_ldiv0或raise函数即可。

此处选用第二种,具体做法:

此处的uboot是whgs的(即配置的时候用的是make whgs_config)

所以找到对应的汇编文件,即:

board/whgs/lowlevel_init.S

在文件最后,添加上

?
1
2
3
4
5
6
@add empty  raise () to fix (when use  new  EABI xscale cross compiler to) compile
@error gcc/config/arm/lib1funcs.asm:1266: undefined reference to ` raise '
.globl  raise
raise :
     nop
     mov pc, lr

然后重新编译,即可。


### 解决 `undefined reference to '__aeabi_uidiv'` 错误的方法 当遇到链接时出现的 `undefined reference to '__aeabi_uidiv'` 错误,通常是因为编译器或链接器未能找到所需的库函数。此问题常见于 ARM 架构下的交叉编译环境中。 #### 缺失的标准库支持 该错误表明程序调用了ARM EABI (Embedded Application Binary Interface) 的除法辅助函数 `__aeabi_uidiv`,但在链接阶段找不到其实现[^1]。这通常是由于缺少必要的标准C库或者其版本不兼容所引起的。 为了修复这个问题,可以尝试以下几种方法: - **确保完整的工具链安装** 验证是否已经正确安装了适用于目标平台(如 GNU/Linux)的所有开发工具包,特别是针对特定硬件架构优化过的glibc或其他替代品。对于基于 Debian 或 Ubuntu 的系统来说,可以通过命令 `sudo apt-get install gcc-arm-linux-gnueabihf` 来获取官方维护的支持包。 - **指定正确的链接选项** 使用 `-lgcc` 和/或 `-lstdc++` 参数显式地告诉链接器包含 GCC 运行时库和 C++ 标准库。这些库包含了处理整数除法等基本操作所需的功能实现。如果项目中还涉及到浮点运算,则可能还需要加入 `-lm` 参数来引入数学库。 ```bash arm-linux-gnueabihf-gcc -o output_file source_files.c -lgcc -lstdc++ ``` - **更新或重新配置构建环境** 如果上述措施仍无法解决问题,考虑升级整个交叉编译工具链至最新稳定版;有时旧版本可能存在已知缺陷。另外,在某些情况下调整项目的 Makefile 文件中的 LDFLAGS 变量也可能有所帮助,比如设置为 `-L/path/to/libraries -Wl,-rpath,/path/to/libraries` 以便让链接器知道去哪里寻找依赖项。 通过以上建议应该能够有效解决因缺失 `__aeabi_uidiv` 导致的链接失败情况。不过具体解决方案还需视实际应用场景而定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值