QT/E的交叉编译环境的搭建和移植

一、建立arm交叉编译工具链

在安装QT/E之前,应确保arm-linux交叉编译工具链已经建立,如果还没有可以参考以下步骤建立。

    1、  下载交叉编译工具cross-2.95.3.tar.bz2(或其他版本如:cross-3.4.4.tar.bz2),这是已经制作好的arm交叉编译工具链,只需解压及建交环境变量即可使用。

    2、  把文件cross-2.95.3.tar.bz2拷贝到一个文件夹,这里我用:/usr/local/arm这个目录。注意后面建立环境变量时要与之对应。

    3、  解压tar -xjvf cross-2.95.3.tar.bz2

    4、建立环境变量export    PATH=/usr/local/arm/2.95.3/bin:$PATH  或者也可以写进文件 ~/.bashrc中,这样就不用每次开机都export啦。

                     vi  ~/.bashrc

在后面加上export  PATH=/usr/local/arm/2.95.3/bin:$PATH

到此arm-linux交叉编译工具链就已经建好了。

 

二、编译QT

    1、QT/E自由版可到官网ftp下载。网址是:ftp://ftp.trolltech.com/qt/source/ 。可自己选择一个版本下载,个人认为QT/E 3.x系列比较好用,不过QT/E 2.x系列在网上的资料比较多。但建议不用qt/e 3.3.x的版本,因为在本人开发的过程当中试用过qt/e 3.3.4和qt/e3.3.8,发现它们在ARM开发板上占CPU的资源特高,一直占cpu 98%左右,现在我还没找到原因,不知道有没有哪位朋友也遇到这个问题。推荐用qt/e 3.1.0版本,我正在用,没遇到什么问题。

    2、在这里,本人假设用的是qt-embedded-free-3.1.0.tar.bz2

    3.把文件qt-embedded-free-3.1.0.tar.bz2拷贝到一个文件夹,这里我用:/usr/local/arm这个目录。注意后面建立环境变量时要与之对应。

    4.解压tar -xjvf qt-embedded-free-3.1.0.tar.bz2

把解压后的文件夹qt-embedded-free-3.1.0改为qte。(可以不改,这里是为了方便,注意后面建立环境变量时要与之对应) 

                mv qt-embedded-free-3.1.0  qte

    5.建立环境变量

              vi     ~/.bashrc

在后面加上

              export QTDIR=/usr/local/arm/qte
              export QTEDIR=$QTDIR
              export PATH=$QTDIR/bin:$PATH
              export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

(请重新登陆,以使得环境变量生效)

    6、配置QT

                     进入QT/E目录:     cd    $QTDIR

 

   输入:   ./configure -embedded arm -thread -no-cups -qvfb -depths 4,8,16,32

 

上述选项: -embedded  arm指目标平台为arm; -thread表示支持qt线程,本人开发当中用到; -qvfb表示支持虚拟缓冲帧工具qvfb,它支持FramBuffer;-depths 4,8,16,32表示支持4,8,16,32位的显示颜色深度。还有很多选项就不一一列举,请查看 ./configure  -help。

 

    此外还有一个选项我没用的是 -qconfig  local,你可以把一些开关变量写到一个文件qconfig-local.h中,并把它放到$QTDIR/src/tools下。可参考这个目录下的qconfig-small.h、qconfig-medium.h 、qconfig-large.h等文件,直接使用它们也行,如:  -qconfig  small 。通过这些开关变量,可以把一些开发当中用不着的构件去掉,减少qt库的大小。这里要对QT比较熟练,初学者可先不理。

 

(本人编译到这里曾出现编译 $QTDIR/include/qvaluestack.h这个文件的时候出错,后来把qt3.3.8对应的文件拷贝过来覆盖便通过了,估计是与gcc的版本不兼容的问题,如果出现阶段warnning,则不用理会)

 

    7、编译

              make sub-src      // 指定按精简方式编译开发包,也就是说有些Qt类未被编译。

    8、测试

至此编译工作完成,最后测试一下是否能正常使用。可以用QT自带的例子来测试,如:

             cd  $QTDIR/examples/aclock      //或你自己新建一个QT工程也行

             make clean                              //把原来的清掉

             rm  *.pro                             //删掉,重新建立工程文件

             qmake -project

             qmake -spec $QTDIR/mkspecs/qws/linux-arm-g++ -o Makefile

 

spec指定目标板的配置文件,这里我做的是linux arm平台,注意在这里,$QTDIR/mkspecs/qws/linux-arm-g++ 它不是编译器,是一个配置文件,而编译时用的编译器是我们在第一步建立的arm交叉编译工具链里面的编译器。 

             make

    如果没出错就表示你的QT/E环境已经成功建立。如果提示说cannot   find   -lqte,那么你试一下修改Makefile文件,找到-lqte ,把它改为-lqte-mt再make一次一般就行了。这是因为如果用到QT线程或其它一些原因,它生成的库不再是libqte.so.3.1.0,而是libqte-mt.so.3.1.0,所以它便找不到了。 PS:如果在修改文件之后仍然有同样的问题的话,建议重新安装

 

三、移植到开发板(以下都是在目标机环境下)

    1、新建一个目录,如:/qt/lib。进入此目录cd   /qt/lib

    2、通过ftp  把上面生成的qt库文件libqte-mt.so.3.1.0下载到开发板/qt/lib/目录下。(注意:不要用wget下载,会破坏库文件,从而出现  ld.so: dynamic-link.h: 62: elf_get_dynamic_info: Assertion ‘! “bad dynamic tag”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””” failed!.这种错误)

    3、创建qt库连接:

              ln -s libqte-mt.so.3.1.0  libqte-mt.so

              ln -s libqte-mt.so.3.1.0  libqte-mt.so.3

              ln -s libqte-mt.so.3.1.0  libqte-mt.so.3.1

              (这里类似于windows里创建文件的映射)

 

    4、  建立环境变量

              vi     ~/.bashrc

在后面加上

             export QTDIR=/qt

             export QTEDIR=$QTDIR
             export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

 

四、到此目标板的环境已经建好。现在可以把上面的例子aclock下载到目标板上试一下能不能跑起来!

在开发板控制台下输入:  ./aclock -qws 

    如果能跑起来但是键盘用不了,那是正常的情况,因为键盘、鼠标等设备的接口还没加进QT/E的原因,而这个不是一两句话能说清的,所以留到以后再另外补充!

补充一点:如果有类似这样的提示:  “./aclock: error while loading shared libraries: libstdc++.so.6: cannot load shared object file: No such file or directory.” 你可以从我们第一步建立的arm交叉编译工具链里的/usr/local/arm/2.95.3/arm-linux/lib/目录下找到相应的库文件下载到开发板的 /lib目录下即可。 PS:我加入缺少的文件后还是会出现同样的问题,不知道为什么

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值