編譯時有時會遇到這種錯誤:
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"