By: Ailson Jack
Date: 2019.09.05
個人博客:http://www.only2fire.com/
本文在我博客的地址是:http://www.only2fire.com/archives/105.html,排版更好,便於學習,也可以去我博客逛逛,興許有你想要的內容呢。
開發環境:Win7 64位
開發板:LPC55S69
交叉編譯工具:2018-q4
1、問題復現
最近在開發LPC55S69的SDK,由於這個芯片採用的是Cortex-M33內核,因此所用到的交叉編譯器也是當前比較新的gcc-arm-none-eabi-8-2018-q4-major-win32。
在開發過程中,編譯自己的SDK時會出現如下問題:
ld.exe: warning: xxxxdebugobjtem has a corrupt section with a size(a0dba) larger than the file size
ld.exe: error: xxxxdebugobjtem : ELF section name out of range
但是我在編譯NXP提供的官方demo時卻沒有這個問題。最開始出現這個問題的時候,我檢查自己的SDK配置是否有問題,始終沒有找到問題所在。後來上網搜索相關問題也沒有找到這類問題的說明更不要談解決方法了,再後來就是通過其他搜索引擎查找問題,嘿,幾經查找,還終於讓我找到了如何解決這個問題的方法,當然了,目前這個問題也完美的解決了。
2、問題產生原因
好了,來談談問題的產生吧:其實這個問題的出現是交叉編譯器gcc-arm-none-eabi-8-2018-q4-major-win32的bug,而且這個bug只有在同時使用-flto和-g/-g1/-g3編譯條件時纔會出現上述問題,並且這個問題也只有在Windows平臺纔會出現。使用gcc-arm-none-eabi-8-2018-q4-major-win32無論是編譯LPC55S69或者是其它ARM平臺的代碼都會出現這個問題。
3、解決辦法
由於問題是由gcc-arm-none-eabi-8-2018-q4-major-win32這個版本的交叉編譯器產生的,那麼解決方法自然是更換其它版本的交叉編譯器了,或者使用版本低一點的交叉編譯器,或者使用版本高一點的交叉編譯器都可以解決這個問題。
我這裏使用當前(2019.09.05)最新的交叉編譯器gcc-arm-none-eabi-8-2019-q3-update-win32,然後編譯我的SDK,嘿,編譯成功,perfect!
原來編譯器也是信不過的,遇到問題還是要好好思考,既考慮自己是否有問題,也要考慮工具是否有問題。好了,問題完美解決,如果覺得這篇文章解決了各位的問題,點個贊或者關注下博主呀,哈哈!
這裏附上交叉編譯器針對這個bug的提交與說明,大家可以瞭解下(當然了文章是全英文):
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89183
https://bugs.launchpad.net/gcc-arm-embedded/+bug/1814397
排版更好的內容見我博客的地址:http://www.only2fire.com/archives/105.html
注:轉載請註明出處,謝謝!^_^