Embedded QT开发环境的建立
2013-03-22
标签: QT

本文主要内容为编译器的安装,安装与建立Qt 桌面运行环境,Qt/E 的交叉编译,建立本机Qtopia 虚拟平台。

预备:编译器安装

编译器: arm-linux-gcc-3.4.1.tar.bz2

一. 安装与建立Qt 桌面运行环境

软件:PC 机操作系统FC2+MINICOM + ARM-LINUX 开发环境

tmake-1.13.tar.gz qt-embedded-2.3.10-free.tar.gz

qt-x11-2.3.2 .tar.gz

把本次实验用到的三个文件拷贝到/public/qt目录下,以下的步骤是假设你在/public/qt下操作的。

Qt/Embedded 平台的搭建需要以下几步:

第一步,解压安装包并设置环境变量

tar –xzvf tmake-1.13.tar.gz

tar –xzvf qt-x11-2.3.2.tar.gz

tar –xzvfqt-embedded-2.3.10-free.tar.gz

mvqt-2.3.10 qt-2.3.10-host

export TMAKEDIR=$PWD/tmake-1.13

export QT2DIR=$PWD/qt-2.3.2

export QTEDIR=$PWD/qt-2.3.10-host

环境变量的设置是非常重要的,它关系到能否正确的安装及编译这些安装包.

注意: 在以下安装中,make命令执行前先执行一下make clean命令.

第二步,编译Qt/Embedded。

1. Build Qt2.3.2

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

make clean

./configure -no-xft

make

mkdir $QTEDIR/bin

cp bin/uic $QTEDIR/bin/

2. Build Qvfb

export TMAKEPATH=$TMAKEDIR/lib/linux-g++

export QTDIR=$QT2DIR

export PATH=$QTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

cd $QTEDIR/tools/qvfb

makeclean

tmake -o Makefile qvfb.pro

make

mv qvfb $QTEDIR/bin/

这一步build qvfb 并建立了从Qt/Embedded 2.3.10 到Qt 2.3.2 的静态库的链接。其中qvfb 工具用来生成Virtual framebuffer,这是一个非常有用的工具,它可以模拟在开发板上的显示情况,如果在Virtual framebuffer 中运行没有问题的话,可以直接通过交叉编译在开发板上运行。

3. Build Qt/Embedded

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

make clean

./configure -no-xft -qvfb -depths 4,8,16,32此时我选择的5

make

第三步 查看运行结果

如果上面各步都能够成功的编译通过,下面就可以通过运行Qt/Embedded 自带的demo 来查看运行结果。

在Virtual framebuffer 上运行:

export QTDIR=$QTEDIR

export PATH=$QTEDIR/bin:$PATH

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

cd $QTEDIR/examples/launcher

qvfb -width 640 -height 480 &

sleep 10

./launcher -qws

出现

libpng error: Valid palette required for paletted images这个问题。

二Qt/E 的交叉编译

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

1. Build Qt/Embedded

tar –xzvf qt-embedded-2.3.10-free.tar.gz

mvqt-2.3.10qt-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

makeclean

./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32

make

出现

/public/qt/qt-2.3.10-target/lib/libqte.so: undefined reference to `operator new[](unsigned int)'

/public/qt/qt-2.3.10-target/lib/libqte.so: undefined reference to `operator delete(void*)'

/public/qt/qt-2.3.10-target/lib/libqte.so: undefined reference to `__cxa_pure_virtual'

/public/qt/qt-2.3.10-target/lib/libqte.so: undefined reference to `operator delete[](void*)'

/public/qt/qt-2.3.10-target/lib/libqte.so: undefined reference to `operator new(unsigned int)'

collect2: ld returned 1 exit status

make[4]: *** [t1]

暂时不管它,不影响的。下面的第2步: “修改tmake 配置文件”即可解决此类问题。

这步完成后,我们会在/$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

有了这个库以后我们就可以把它拷贝到我们的开发板中相应的库目录下面,这里我们选择了开发板上的/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

2. 修改tmake 配置文件

vi $ TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf

将其中“TMAKE_LINK= arm-linux-gcc”

“TMAKE_LINK_SHLIB= arm-linux-gcc”

修改为:“TMAKE_LINK= arm-linux-g++”

“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删除。

progen –t app.t –o progressbar.pro

echo $TMAKEPATH

查看返回的结果的结尾字符是否是“……/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

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

tmake –o makefile progressbar.pro

make

如果没出现错误的话就可以在当前目录下找到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

我的解决办法是从编译器目录下查找,并拷贝到开发板/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

方法同上

在板子上:

[root@hjembed qt_bin]# ./progress -qws

Cannot find font definition file /usr/local/qt-embedded/lib/fonts/fontdir - is ?

[root@hjembed qt_bin]# ls

helloprogress

[root@hjembed qt_bin]# ./hello-qws

Cannot find font definition file /usr/local/qt-embedded/lib/fonts/fontdir - is ?

出现此问题, 解决办法:

在上面拷贝libqte*.so* 时顺带把fonts目录也一并考入。并设置环境变量。

[root@hjembed qt_bin]# export QTDIR=/usr/

[root@hjembed qt_bin]# export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

[root@hjembed qt_bin]# export PATH=$QTDIR/qt_bin:$QTDIR/bin:$PATH

[root@hjembed qt_bin]# echo $LD_LIBRARY_PATH

/usr//lib:/lib:/usr/lib

在屏幕上看到了界面, 成功了。

三. 建立本机Qtopia 虚拟平台

软件:FC2 + 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

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

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

1. 解压缩安装文件:

tar jxvf qtopia-free-source-2.1.1.tar.bz2

mv qtopia-2.1.1qtopia-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.10qt-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

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/

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/

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

5.Build Qtopia:

cd $QPEDIR

export QTDIR=$QTEDIR

export PATH=$QPEDIR/bin:$PATH

exportLD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH

./configure

make

和前面编译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

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

cd $QPEDIR/bin

qvfb &./qpe.sh

后记:

几个环境变量设置的脚本文件

qt程序: 安装目录在/public/qt

1:在 host 上用qvfb模拟开发环境, 此时编译程序需设置环境变量。

cd /public/qt

sourceconfighost.sh

cat confighost.sh

export TMAKEDIR=$PWD/tmake-1.13

export QT2DIR=$PWD/qt-2.3.2

export QTEDIR=$PWD/qt-2.3.10-host

export TMAKEPATH=$TMAKEDIR/lib/linux-g++

export PATH=$QTEDIR/bin:$QT2DIR/bin:$PATH

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

export QTDIR=$QTEDIR

2: 当要交叉编译target 上的qt程序 时, 需设置环境变量。

cd/public/qt

sourceconfigTarget.sh

catconfigTarget.sh

export TMAKEDIR=$PWD/tmake-1.13

export QT2DIR=$PWD/qt-2.3.2

export QTEDIR=$PWD/qt-2.3.10-target

export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++

export PATH=$QTEDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTEDIR/lib:$LD_LIBRARY_PATH

export QTDIR=$QTEDIR

qtopia 程序安装目录在/public/qtopia

1: host 上模拟开发环境,需设置的环境变量

cd /public/qtopia

sourceconfigHost.sh

catconfigHost.sh

export QTEDIR=$PWD/qt-2.3.10-target

export QPEDIR=$PWD/qtopia-2.1.1-target

export QT2DIR=$PWD/qt-2.3.2

export TMAKEDIR=$PWD/tmake-1.13

export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++

export QTDIR=$QTEDIR

export PATH=$TMAKEDIR/bin:$QTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH

2: Targe上, 还没有做。

可能会用到的工具/仪表
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号