gcc编译问题:ELF section name out of range或xxxxdebugobjtem has a corrupt section with a size完美解决

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!

方法二:

         当然了,如果不想更换交叉编译器,这里也可以根据自己的实际情况,去掉-flto或者-g/-g1/-g3编译选项,这样也算是一种解决问题的方法。

         原来编译器也是信不过的,遇到问题还是要好好思考,既考虑自己是否有问题,也要考虑工具是否有问题。好了,问题完美解决,如果觉得这篇文章解决了各位的问题,点个赞或者关注下博主呀,哈哈!

这里附上交叉编译器针对这个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
注:转载请注明出处,谢谢!^_^

猜你喜欢

转载自blog.csdn.net/jackailson/article/details/100568332