undefined reference to `__umoddi3'解决办法
来源:互联网 发布:数据安全管理指引 编辑:程序博客网 时间:2024/05/16 12:49
主机配置:ubuntu 11.10下利用交叉编译工具arm-linux-gcc编译内核;
目标板:AT91SAM9260
内核版本:linux-2.6.24
在编译内核linux-2.6.24的过程中遇到错误:
kernel/built-in.o: In function `getnstimeofday':
utsname_sysctl.c:(.text+0x23c64): undefined reference to `__umoddi3'
kernel/built-in.o: In function `do_gettimeofday':
utsname_sysctl.c:(.text+0x23d18): undefined reference to `__udivdi3'
utsname_sysctl.c:(.text+0x23d34): undefined reference to `__umoddi3'
kernel/built-in.o: In function `timekeeping_resume':
utsname_sysctl.c:(.text+0x23ec0): undefined reference to `__udivdi3'
utsname_sysctl.c:(.text+0x23ee0): undefined reference to `__umoddi3'
kernel/built-in.o: In function `update_wall_time':
utsname_sysctl.c:(.text+0x24640): undefined reference to `__udivdi3'
utsname_sysctl.c:(.text+0x24660): undefined reference to `__umoddi3'
utsname_sysctl.c:(.text+0x246f4): undefined reference to `__udivdi3'
utsname_sysctl.c:(.text+0x24714): undefined reference to `__umoddi3'
make: *** [.tmp_vmlinux1] Error 1
网上查阅了,说是include/linux/time.h文件中函数timespec_add_ns()的loop循环在编译过程中被优化掉了。
static inline void timespec_add_ns(struct timespec *a, u64 ns){ns += a->tv_nsec;while(unlikely(ns >= NSEC_PER_SEC)) {ns -= NSEC_PER_SEC;a->tv_sec++;}a->tv_nsec = ns;}利用https://lkml.org/lkml/2008/2/22/464的patch,可以解决这个问题。打上patch之后的函数是:
static inline void timespec_add_ns(struct timespec *a, u64 ns){ns += a->tv_nsec;while(unlikely(ns >= NSEC_PER_SEC)) {/* The following asm() prevents the compiler from * optimising this loop into a modulo operation. */asm("" : "+r"(ns));ns -= NSEC_PER_SEC;a->tv_sec++;}a->tv_nsec = ns;}更改之后编译顺利通过。
- undefined reference to `__umoddi3'解决办法
- 编译错误:undefined reference to `__umoddi3'的处理
- undefined reference to `***@***'解决办法
- undefined reference to 解决办法
- undefined reference to `pthread_join'解决办法
- undefined reference to `sqrt' 的解决办法
- 多线程 undefined reference to 'pthread_create' 解决办法
- undefined reference to vtable 原因与解决办法
- undefined reference to `SetPduPowerConsumptionCnt'的解决办法
- undefined reference to vtable 原因与解决办法
- xx.cpp undefined reference to xx 解决办法
- 问题“undefined reference to `android_log_print”的解决办法
- linux 下 undefined reference to `mysql_init'解决办法
- undefined reference to `GetStockObject@4'的解决办法
- undefined reference to `inet_addr'和undefined reference to `inet_addr@4'的解决办法
- undefined reference to 'floor'/undefined reference to `&
- undefined reference to 'floor'/undefined reference to
- undefined reference to 'GetStockObject@4 linker error 的解决办法
- 参考网址博客汇总
- 文件乱码---源于使用了UE编辑器新建的文件
- 随机变形
- linux下JAVA安装,及Java环境变量配置
- C++程序设计之四书五经(转载)
- undefined reference to `__umoddi3'解决办法
- 动画设计
- 英码 ema SBC37x 3730 开发板 调试环境:
- 常用网站备份
- KurbKarma:解决停车难的问题
- 无线Trace脚本(旧格式)-路由负载
- 创业宝典:未来企业家之路(第5版)
- 金箍棒变长
- ora-600 4194错