解決undefined reference to `__aeabi_uidivmod’和undefined reference to `__aeabi_uidiv’錯誤

來源:互聯網
上載者:User

轉自:http://blog.chinaunix.net/uid-26833883-id-3282967.html

自己寫裸機驅動程式時,使用了除法,在連結的時候出了如下錯誤:  使用的編譯器是:  

後來上網搜了一下原因,由於編譯器不支援除法運算,但是也沒有搜到解決方案。看了一下代碼確實用到了除法,把除法去掉可以正常串連通過。後來想了想了,之前編譯核心和編譯u_boot都是這個編譯器的呀,他們肯定有除法運算呀,他們是怎麼做到的呢?於是看了一下u_boot的Makefile,很暈,東西很多,後來編譯了一下,看到了這個:  u_boot在連結的時候,指定了黃色顏色的路徑和-lgcc選項(-l後面的是連結庫的名字)到指定的目錄下看到如下內容:  裡面有一個libgcc.a的靜態庫,編譯器支援軟浮點,猜想軟浮點的實現應該就是在找個靜態庫中。在自己的Makefile裡面加上了這些東西,繼續編譯串連出現如下錯誤資訊:  缺少"raise符號",在u_boot源碼中搜尋"raise"如下: 
是一個函數,什麼也沒幹,我在自己的代碼中寫了一個這樣的空函數,編譯通過。Makefile 如下:   總結:    ARMv4t的ARM核不支援浮點運算,為了讓其支援浮點運算,編譯器使用了軟浮點的方法,但是需要相應的除法庫支援,在串連的時候需要指定其路徑和庫名。    一句經典名言: 在IT行業,遇到問題,只要一直解決,總有解決的一天。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.