对于嵌入式交叉编译总结

这几天终于搞定了老师项目里我负责的部分,主要是做一个图像采集的手持端,我选用了JZ2440。
从移植内核、制作文件系统、Qt移植总结下来发现在对于代码的交叉编译必须保证编译平台的一致性。对于s3c2440来说是armv4t,所以当我们编译出来程序必须要是

执行 arm-linux-readelf libjpeg.so.62.0.0 -A (libjpeg.so.62.0.0 为我交叉编译出来的)

这里写图片描述
这里的Tag_CPU_arch: v4T 很重要 、我的工具链arm-none-linux-gnueabi-(4.3.2)默认编译出来的程序为V5 平台的,由于我又是新手,开始时给我带来很多困扰

后来我成功搭建好busybox时Qt程序老是出现非法指令问题
我查看了我生成的Qt程序,发现为V5,这也不难解释Illegal instruction错误
这里写图片描述

开始时我走了弯路,我在我写的Qt程序里加入了

这里写图片描述

后来发现还是编译出来为V5,我又尝试在Makefile中加入march指定,发现还是不行,后来突然发现我编译出来的Qt链接库全是V5平台的,怪不得编译出来的程序也是V5,什么样的爹什么样的儿子嘛。于是我又开始程序交叉编译armv4t的qt4.7 。这这间经历的坑我就不多说了,直接贴上我的文件

./configure -opensource -embedded armv4t -xplatform qws/linux-arm-g++ -no-webkit -nomake demos -nomake examples -qt-libtiff -qt-libmng -qt-libjpeg -qt-mouse-tslib -qt-mouse-pc -qt-gfx-transformed -no-mouse-linuxtp -prefix /opt/qt-4.7.1 -I /usr/local/tslib/include -L /usr/local/tslib/lib

加粗的这一句很重要,直接决定了编译出来是armv4t还是armv5
(默认V5)。最后的-I -L根据自己情况写

编译libtools
./configure CC=arm-linux-gcc-yin –host=arm –prefix=/opt/jpeg/libtool-release

编译jpeg-6b
./configure CC=arm-linux-gcc-yin –prefix=/opt/jpeg/jpeg-6b-release –enable-shared –enable-static –host=arm

编译tslib
CFLAGS=-march=armv4t ./configure –host=arm-linux –cache-file=arm-linux.cache -prefix=/usr/local/tslib ac_cv_func_malloc_0_nonnull=yes

这里写图片描述

arm-linux-gcc-yin 是我自己做的脚本。

最后一句:最重要的是统一

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值