原来一直在老本本上工作,cpu是inter32位的。一直使用的arm-linux-gcc都是从网上下载的,使用都没发生过什么问题。
前段时间配了一个台式电脑,cpu是amd64位的, 装了arch-linux 64-bit
在配置 arm 交叉编译环境时出现了几个问题,解决了,记录一下:
1. 将原来使用的arm-linux-gcc解压后,使用不了,
表现为, 该可执行程序(如arm-linux-gcc)存在, 但执行时却报错“找不到该文件或目录”
原因: 现在使用的是64-bit的arch-linux, 原来的交叉编译器是32位版本的,所以会出现这样的问题
解决: 自己build一个64位的arm交叉编译器即可, 用buildroot编译一个很方便。
2. 64位的环境下, long是64位的, 这样在做除法时会使用 libgcc 库中的一个做除法的函数。
所以编译时很多时会都会出现下面这样的错误:
undefined reference to `__udivsi3'
现在用的arm-linux-gcc是在64bit linux上build出来的, 所以其默认也是64位的, 在使用它编译arm可执
行程序时, 就会出现上面的问题, 这些问题大都在代码中做除法的地方。
原因: 上面已经分析了
解决 : 在编译时加上参数 -march=armv5te -mcpu=arm926ej-s
这里我使用的cpu是arm926ej-s的core, 版本是armv5te的, 具体的参数要根据使用的arm cpu来设置。 一般更改时去找Makefile中的CFLAGS 变量,在其中加上上面的参数即可。
阅读(11807) | 评论(0) | 转发(0) |