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"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章