对于嵌入式交叉编译总结

这几天终于搞定了老师项目里我负责的部分,主要是做一个图像采集的手持端,我选用了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 是我自己做的脚本。

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

猜你喜欢

转载自blog.csdn.net/a1171936767/article/details/72863724
今日推荐