本文介绍了Qt交叉编译工具建立,主要介绍了Qt/Embedded 的交叉编译,建立本机Qtopia 虚拟平台,其他内容想要了解请看本文指引。先来看本篇内容。

继续上面的内容继续讲 Qt交叉编译工具建立 上篇,主要介绍了Qt/Embedded 的交叉编译,建立本机Qtopia 虚拟平台这两个方面介绍的!

Qt交叉编译工具建立 中篇(QT交叉编译)  Qt Embedded 第1张

一、Qt/Embedded的交叉编译

要将我们写好的程序发布到开发板上,我们需要对Qt/Embedded 重新编译,与前面在宿主机上编译类似,步骤如下:

1. Build Qt/Embedded

  1. tar–xzvfqt-embedded-2.3.10-free.tar.gz
  2. mvqt-2.3.10
  3. qt-2.3.10-target
  4. exportTMAKEDIR=$PWD/tmake-1.13
  5. exportQT2DIR=$PWD/qt-2.3.2
  6. exportQTEDIR=$PWD/qt-2.3.10-target
  7. cd$QTEDIR
  8. exportTMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
  9. exportQTDIR=$QTEDIR
  10. exportPATH=$QTDIR/bin:$PATH
  11. exportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
  12. makeclean
  13. ./configure-xplatformlinux-arm-g++-no-xft-no-qvfb-depths4,8,16,32
  14. make

这步完成后,我们会在/$QTEDIR/lib/目录下面看到libQte.so libqte.so.2 libqte.so.2.3 libqte.so.2.3.10 这四个文件,我们可以使用file 命令来查看这个库文件是否是我们需要的在开发板上跑的库。

  1. filelibqte.so.2.3.10
  2. libqte.so.2.3.10:ELF32-bitLSBsharedobject,ARM,version1(ARM),stripped

有了这个库以后我们就可以把它拷贝到我们的开发板中相应的库目录下面,这里我们选择了开发板上的/usr/lib 目录,将/$QTEDIR/lib/下的libqte.so*复制到/usr/lib 目录下。

首先要建立宿主机和开发板的通讯,假设本机的ip 地址为192.168.0.56 并且/root/share 为共享文件夹。

  1. cp–arf/$QTEDIR/lib/libqte.so*/root/share
  2. 启动minicom
  3. mount–tnfs–onolock192.168.0.56:/root/share/mnt/nfs将文件复制到开发板上
  4. cp–arf/mnt/nfs/libqte.so*/usr/lib

2. 修改tmake 配置文件

  1. vi$TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf
  2. 将其中“TMAKE_LINK=arm-linux-gcc”
  3. TMAKE_LINK_SHLIB=arm-linux-gcc”
  4. 修改为:“TMAKE_LINK=arm-linux-g++”
  5. TMAKE_LINK_SHLIB=arm-linux-g++”

3.生成可执行文件

这里我们采用了Qt/Embedded自带的一个demo,它在/$QTEDIR/examples/progressbar目录下,这个目录包括下面几个文件: main.cpp、Makefile.in 、progressbar.h 、

Makefile、progressbar.cpp、progressbar.pro,如果已经有了progressbar 的执行文件,可以使用make clean删除。

  1. progen–tapp.t–oprogressbar.pro
  2. echo$TMAKEPATH

查看返回的结果的结尾字符是否是“……/qws/linux-arm-g++”,如果不是的话需要在命令行中重新设置TMAKEPATH

export TMAKEPATH=/tmake 的安装路径(如$TMAKEDIR)/lib/qws/linux-arm-g++

此外还要使QTDIR指向Qt/Embedded 的安装路径,如:

export QTDIR=$QTEDIR 或者直接指定路径

  1. exportQTDIR=……/qt-2.3.10-target

完成了上面的环境变量的设置,并用echo 命令检查无误以后,就可以使用tmake 工具来生成我们需要的makefile 文件,在命令行中输入如下命令:

  1. tmake–omakefileprogressbar.pro
  2. make

如果没出现错误的话就可以在当前目录下找到progressbar这个可执行文件,它就是在我们开发板上的相应目录中运行“./progressbar -qws”就可以运行程序了。

注: (1)如果执行命令

  1. [/mnt/nfs]./progressbar-qws
  2. ./progressbar:errorwhileloadingsharedlibraries:libstdc++.so.6:cannotopensharedobjectfile:Nosuchfileordirey

我的解决办法是从编译器目录下查找,并拷贝到开发板/usr/lib/中


即拷贝/usr/local/arm/3.4.1/arm-linux/lib/libstdc++.so* 到开发板/usr/lib/中

(2).[/mnt/nfs]./progressbar –qws

  1. /progressbar:errorwhileloadingsharedlibraries:libgcc_s.so.1:cannotopensharedobjectfile:Nosuchfy

方法同上

二、建立本机Qtopia 虚拟平台

软件:Redhat Linux9.0 for PC + minicom + Embeded Linux for 2410

  1. tmake-1.13.tar.gzqtopia-free-source-2.1.1.tar.bz2qt-embedded-2.3.10-free.tar.gzqt-x11-2.3.2.tar.gz

将本次实验所需的四个文件拷贝到/root/qtopia 目录下,我们以下的实验都是在这个目录下进行的。

宿主机上建立虚拟的Qtopia 环境需要以下几个步骤:

1. 解压缩安装文件:

  1. filelibqte.so.2.3.10
  2. libqte.so.2.3.10:ELF32-bitLSBsharedobject,ARM,version1(ARM),stripped
0

2. Build Qt/X11:

  1. filelibqte.so.2.3.10
  2. libqte.so.2.3.10:ELF32-bitLSBsharedobject,ARM,version1(ARM),stripped
1

3. Build Qvfb:

  1. filelibqte.so.2.3.10
  2. libqte.so.2.3.10:ELF32-bitLSBsharedobject,ARM,version1(ARM),stripped
2

4.Build libqte:

  1. filelibqte.so.2.3.10
  2. libqte.so.2.3.10:ELF32-bitLSBsharedobject,ARM,version1(ARM),stripped
3

5.Build Qtopia:

  1. filelibqte.so.2.3.10
  2. libqte.so.2.3.10:ELF32-bitLSBsharedobject,ARM,version1(ARM),stripped
4

和前面编译Qt/Embedded 的基本步骤一样,还可以参考“./configure --help”,来进行选择。为了保证qvfb 能够正确显示qtopia 的结果,我们必须保证环境变量设置正确,我们可以通过“env”命令来检查下面的环境变量,也可以用下面的方法来检查。

  1. filelibqte.so.2.3.10
  2. libqte.so.2.3.10:ELF32-bitLSBsharedobject,ARM,version1(ARM),stripped
5

出现上面的结果就可以正常的显示Virtual framebuffer,我们可以通过下面的命令在Virtual framebuffer 中实现Qtopia。

  1. filelibqte.so.2.3.10
  2. libqte.so.2.3.10:ELF32-bitLSBsharedobject,ARM,version1(ARM),stripped
6

小结:关于Qt交叉编译工具建立的内容介绍完了,想要深入了解的话,请继续关注 Qt交叉编译工具建立 下篇 ,***希望本文对你有所帮助!

转载请说明出处
知优网 » Qt交叉编译工具建立 中篇(QT交叉编译)

发表评论

您需要后才能发表评论