标签 gcc 下的文章
 2019-09-05T22:06:17.969000    |      Linux问题集合    |     AilsonJack    |     暂无评论    |     1996 views
开发环境:Win7 64位开发板:LPC55S69交叉编译工具:2018-q41、问题复现最近在开发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 sizeld.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=89183https://bugs.launchpad.net/gcc-arm-embedded/+bug/1814397
Linux问题集合gcc嵌入式 阅读全文»
 2016-03-02T18:00:37.825821    |      Linux问题集合    |     AilsonJack    |     暂无评论    |     7182 views
最近在学习Linux下的C编程,刚遇到一个问题:undefined reference to 'clock_gettime',我直接使用gcc test.c来编译我的程序,报出的具体错误如下:/tmp/ccwmQhJv.o: In function `rt_gettime':test.c:(.text+0x7e): undefined reference to `clock_gettime’collect2: ld 返回 1详细截图:发现是在链接的时候出错。经过查找发现clock_gettime在实时库(real time)里面,由于链接的时候没有链接这个库导致报错。解决方案:只需在我们编译的时候加上-lrt即可。即我这里是执行命令:gcc  test.c  -lrt,此时没有报任何的错误,说明编译通过了:附:linux常用的库    libz   压缩库(Z)    librt   实时库(real time)    libm   数学库(math)    libc   标准C库(C lib)
Linuxgcc问题集合 阅读全文»
 2016-02-29T17:34:23.352489    |      Linux问题集合    |     AilsonJack    |     暂无评论    |     3239 views
在编译Linux-2.6.33内核时,出现的了一个错误就是:重复的成员‘page’,这个是由于gcc的版本较高造成的。之前编译Linux-2.6.33内核出现过的另一个问题,该问题在文章《elf_i386或elf_x86_64:没有那个文件或目录 解决方法》中进行了描述,大家可以自行点击查看,如果遇到了也知道如何解决这个问题。重复的成员‘page,编译出的详细错误信息如下:In file included from drivers/net/igbvf/ethtool.c:36:0:drivers/net/igbvf/igbvf.h: At top level:drivers/net/igbvf/igbvf.h:129:15: error: duplicate member ‘page’make[3]: *** [drivers/net/igbvf/ethtool.o] Error 1make[2]: *** [drivers/net/igbvf] Error 2make[1]: *** [drivers/net] Error 2make: *** [drivers] Error 2我的编译出错信息,截图如下:解决办法:1、方法一根据linux社区的建议,此错误是由于gcc版本与内核版本的冲突导致的。他们的建议是更换新版本的内核,但是某些特殊条件下,我们不能更换内核版本,于是我们修改内核代码适应当前的编译器(即接下来的方法二)。2、方法二a、按照错误的指示,错误的代码是在drivers/net/igbvf/igbvf.h文件的第129行。b、打开文件,看129行,代码为:struct page *page;再往上看,第124行,也有struct page *page;这行代码,这个结构定义在内部的一个结构体中。就是他的名字与129行的重复了,而4.6.3的编译器不支持这种方式的定义,我们修改129行的代码为struct page *pagep;保存退出。接下来重新编译,编译通过。如果编译过程中,还遇到什么问题,大家可以在网上搜索或者给我留言吧。
Linuxgcc问题集合内核学习 阅读全文»
 2016-02-29T17:13:37.085289    |      Linux问题集合    |     AilsonJack    |     暂无评论    |     3823 views
最近在编译Linux-2.6.33内核时出现错误,报出的错误的大致信息是:elf_i386或elf_x86_64:没有那个文件或目录,这里分享一下解决方法,方便遇到同样问题的朋友能够把问题解决。编译Linux-2.6.33内核,在make menuconfig配置完之后(选的默认配置),然后make,过一段时间出现如下错误:gcc: 错误: elf_i386:No such file or directorymake[2]: *** [arch/x86/vdso/vdso32-int80.so.dbg] 错误 1make[1]: *** [arch/x86/vdso] 错误 2make: *** [sub-make] 错误 2我的编译结果如下图:原因是gcc 4.6不再支持linker-style架构(我使用的是gcc 4.6.3)。下面是解决方法:确保当前路径是在内核目录中,然后执行命令:vim arch/x86/vdso/Makefile,在Makefile中搜索elf_x86_64,然后把"-m elf_x86_64"替换为"-m64";接着在Makefile中搜索elf_i386,然后把"-m elf_i386"替换为"-m32",保存退出,问题解决了。接着继续编译,就可以了。我在编译Linux-2.6.33内核时遇到的另一个问题是:重复的成员'page'问题,大家可以看看我写的这篇文章《重复的成员'page'错误的解决方法》。如果编译过程中,还遇到什么问题,大家可以在网上搜索或者给我留言吧。
Linux问题集合gcc内核学习 阅读全文»
  • 1

  本站信息

目前本站共被浏览 155973 次
目前本站已经运行 3344 天
目前本站共有 165 篇文章
目前本站共有 6 条评论信息
目前本站共有 104 个标签
目前本站共有 0 条留言信息
网站创建时间: 2015年03月01日
最近更新时间: 2023年11月26日
Copyright © 2015~2023  说好一起走   保留所有权利   |  百度统计  蜀ICP备15004292号