Qt交叉编译工具建立 中篇

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

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

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

1. Build Qt/Embedded

tar –xzvf qt-embedded-2.3.10-free.tar.gz  
mv  qt-2.3.10  
qt-2.3.10-target  
export TMAKEDIR=$PWD/tmake-1.13  
export QT2DIR=$PWD/qt-2.3.2  
export QTEDIR=$PWD/qt-2.3.10-target  
cd $QTEDIR  
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++  
export QTDIR=$QTEDIR  
export PATH=$QTDIR/bin:$PATH  
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH  
make  clean  
./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32  
make 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

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

file libqte.so.2.3.10  
libqte.so.2.3.10: ELF 32-bit LSB shared object, ARM, version 1 (ARM), stripped 
  • 1.
  • 2.

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

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

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

 2. 修改tmake 配置文件

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

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

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

progen –t app.t –o progressbar.pro  
echo $TMAKEPATH 
  • 1.
  • 2.

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

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

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

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

export QTDIR=……/qt-2.3.10-target 
  • 1.

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

tmake –o makefile progressbar.pro  
make 
  • 1.
  • 2.

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

[/mnt/nfs]./progressbar -qws  
./progressbar: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or direy 
  • 1.
  • 2.

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

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

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

/progressbar: error while loading shared libraries: libgcc_s.so.1: cannot open shared object file: No such fy 
  • 1.

方法同上

二、建立本机Qtopia 虚拟平台
 
软件:Redhat Linux9.0 for PC + minicom + Embeded Linux for 2410

tmake-1.13.tar.gz qtopia-free-source-2.1.1.tar.bz2 qt-embedded-2.3.10-free.tar.gz qt-x11-2.3.2.tar.gz 
  • 1.

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

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

1. 解压缩安装文件:

tar jxvf qtopia-free-source-2.1.1.tar.bz2  
 mv qtopia-2.1.1  qtopia-2.1.1-target  
 tar xzf tmake-1.13.tar.gz  
 tar xzf qt-x11-2.3.2.tar.gz  
 tar xzf qt-embedded-2.3.10-free.tar.gz  
 mv qt-2.3.10  qt-2.3.10-target  
 export QPEDIR=$PWD/qtopia-2.1.1-target  
 export TMAKEDIR=$PWD/tmake-1.13  
export QT2DIR=$PWD/qt-2.3.2  
 export QTEDIR=$PWD/qt-2.3.10-target 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

 2. Build Qt/X11: 

cd $QT2DIR  
export TMAKEPATH=$TMAKEDIR/lib/linux-g++  
export QTDIR=$QT2DIR  
export PATH=$QTDIR/bin:$PATH  
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH  
./configure -no-xft  
make  
mkdir $QTEDIR/bin  
cp bin/uic $QTEDIR/bin/ 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

3. Build Qvfb:

export TMAKEPATH=$TMAKEDIR/lib/linux-g++  
export QTDIR=$QT2DIR  
export PATH=$QTDIR/bin:$PATH:$TMAKEDIR/bin  
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH  
cd $QTEDIR/tools/qvfb  
tmake -o Makefile qvfb.pro  
make  
mv qvfb $QTEDIR/bin/ 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

4.Build libqte:

cd $QTEDIR  
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++  
export QTDIR=$QTEDIR  
export PATH=$QTDIR/bin:$PATH  
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH  
cp -f $QPEDIR/src/qt/qconfig-qpe.h src/tools/  
./configure -system-jpeg -no-xft -qconfig qpe -qvfb -depths 4,8,16,32  
make sub-src 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

5.Build Qtopia:

cd $QPEDIR  
export QTDIR=$QTEDIR  
export PATH=$QPEDIR/bin:$PATH  
export  
LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH  
./configure  
make 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

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

 echo $QPEDIR  
/root/qtopia/qtopia-free-2.1.1/  
echo $QTDIR  
/root/qtopia/qt-2.3.10  
echo $LD_LIBRARY_PATH  
/root/qtopia/qtopia-free-2.1.1/lib:/root/qtopia/qt-2.3.10/lib  
echo $PATH  
/root/qtopia/qt-2.3.10/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local 
                     /sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

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

cd $QPEDIR/bin  
qvfb &  
sleep 10  
./qpe.sh 
  • 1.
  • 2.
  • 3.
  • 4.

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

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-06-23 16:24:21

Qt Embedded 交叉编译

2011-06-23 18:16:59

Qt Qtopia

2011-06-28 13:47:37

Embedded QT ARM

2011-06-13 14:49:57

Qt Designer

2011-07-04 15:13:31

QT MPlayer 移植

2011-06-17 17:01:22

Qt Eclipse Windows

2010-02-02 15:13:42

Linux ARM

2011-06-30 10:22:48

QT Graphics View

2011-06-09 16:47:56

Qt 嵌入式

2021-05-13 09:45:53

GolangLinux交叉编译

2011-06-27 14:31:29

Qt 数据库 SQL语句

2011-07-04 15:48:57

Qt 桌面

2011-06-08 15:27:24

QT QT 4.5 编译

2011-06-09 15:18:07

QT 编译

2011-06-21 16:51:21

Qt 静态 编译

2011-06-21 14:34:30

Qt Designer mini2440

2011-06-22 14:38:09

QT 多线程 线程安全

2010-03-02 10:55:47

Linux SkyEy

2010-02-24 16:49:24

Fedora SkyE

2011-07-05 16:31:17

Qtopia 交叉编译
点赞
收藏

51CTO技术栈公众号