分类: 嵌入式
2012-09-18 13:34:40
编译时有时会遇到这种错误:
undefined reference to `__udivdi3'
嵌入式中,32位系统中(目前多数系统都是,比如ARM的片子),对于普通的a除以b(b为32位):
(1)当a为32位,Linux 内核中,常用uint32_t 类型,可以直接写为 a/b
(2)但是,对于a是64位,uint64_t的时候,就要用到专门的除操作相关的函数,linux内核里面一般为
do_div(n, base),注意,此处do_div得到的结果是余数,而真正的a/b的结果,是用a来保存的。
do_div(n,base)的具体定义,和当前体系结构有关,对于arm平台,在include/asm-arm/div64.h
因此,如果你当前写代码,a/b,如果a是uint64_t类型,那么一定要利用do_div(a,b),而得到结果a,
而不能简单的用a/b,否则编译可以正常编译,但是最后链接最后出错,会提示上面的那个错误:
undefined reference to "__udivdi3"