undefined reference to __udivdi3问题之解决

编译时有时会遇到这种错误:

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"

你可能感兴趣的:(linux,嵌入式,div,平台,reference,linux内核)