qt交叉编译工具的建立

一部分转用的人家的,一部分我的经验!

学习笔记----图形界面程序Qt安装及其在2410上的移植
本文主要内容为编译器的安装,安装与建立Qt 桌面运行环境,Qt/E 的交叉编译,建立本机Qtopia 虚拟平台,Qtopia2.1.1 在2410-上的移植.

预备:编译器安装

编译器: arm-linux-gcc-3.4.1.tar.bz2
(软件从网上下载,如果不知道从什么地方下载,google就是了。)

把软件arm-linux-gcc-3.4.1.tar.bz2拷贝到/usr/local下,在终端执行如下命令安装:
tar -xjf arm-linux-gcc-3.4.1.tar.bz2

生成的编译工具在目录/usr/local/arm/3.4.1/bin下,修改/etc/profile,增加如下一行。这可以让我们直接运行arm-linux-gcc,而不必将其绝对路径都写出来,不过这得重新启动后才生效:
pathmunge /usr/local/arm/3.4.1/bin
硬件:UP-NETARM2410S

这一步,不一定要下载同样的版本的交叉编译工具,我用的是2.95.3,在执行完这一步的时候,把环境变量加入到profile以后,注消一下,以便于以后的路径里面是arm-linux-g++.


下面的安装以及环境变量的设置,按照这里说的进行,但是有一点要注意,在configure的时候选择large模式,要不可能会出现make出错,可以试试,如果出错了,再make clean就是了.

我按照说明,只进行到了第二点结束,因为我认为,qtopia暂时没有必要试用.

还有我觉得这个里面使用的版本太低,我会尝试都使用qt3的版本的库文件.

还有他在交叉生成编译文件的时候,使用了progen和tmake,他的用法有点不对,我觉得,我是这么用的:
假设hello工程有hello.h和hello.cpp两个文件,先用progen生成pro文件,其实progen的意思就是pro文件的gernerate(生成)工具.
progen -o hello.pro
tmake hello.pro -o Makefile
make
中间可以查看一下makefile文件的内容,注意,CXX=arm-linux-g++,LINK=arm-linux-g++.

再可以把make后的文件看看,file hello,系统会显示这个是一个elf文件就是说这个是一个arm上面执行的文件!

在交叉编译生成可执行文件的时候,也就是在操作(三)下面的第三点的时候,如果新开的一个终端,那么以前的定义的一些临时的环境变量是消失了的,一般系统也带有qt,而我们的嵌入式的qt版本比系统的低级,最好是不要在系统路径下面设置环境变量,tmake已经加入了系统路径了,所以我们要重新设置一下,或者说定义一下.如下:

echo $TMAKEPATH
查看返回的结果的结尾字符是否是“……/qws/linux-arm-g++”,如果不是的话需要在命令行中重新设置TMAKEPATH
export TMAKEPATH=/tmake 的安装路径(如$TMAKEDIR)/lib/qws/linux-arm-g++
我的系统就是:
export TMAKEPATH=/gg/tmake-1.13/lib/qws/linux-arm-g++

再设置QTDIR和QTEDIR:
QTEDIR要设置成为QTE的文件夹,export QTEDIR=$PWD/qt-2.3.10-target,PWD是我所在的路径,我的是/gg,也就是export QTEDIR=/gg/qt-2.3.10-target
再export QTDIR=$QTEDIR就可以直接使用progen以及tmake工具了.


以上是如何生成elf格式的文件,要生成主机上使用的.o文件怎么弄呢?

第一种方法:

首先安装系统时候也安装了高版本的qt,可以使用这个qt,用qmake工具,首先用qtdesigner创建一个pro文件和一些相应的.h和.cpp文件,比如hello.cpp然后,qmake hello.pro,再make生成Makefile,再make成功的话就可以./hello了.

第二种方法:

就是用下面安装的低级版本的qt库来运行,条件就是开始已经安装了这些库,有一点要注意的就是要按照安装时候设置的路径重新定义一下环境变量.否则会出错的.
当然了这里也要用qtdesigner创建一个pro文件和一些相应的.h和.cpp文件,然后用progen和tmake工具生成makefile!
还有一点要注意就是qvfb这个工具不一定要用tools里面的,可以在网上 新下载一个编译之后运行,可以把路径加入系统路径以后方便自己用.

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

软件:PC 机操作系统REDHAT LINUX 9.0 +MINICOM + ARM-LINUX 开发环境
tmake-1.13.tar.gz qt-embedded-2.3.10-free.tar.gz
qt-x11-2.3.2 .tar.gz
软件从网上下载,如果不知道从什么地方下载,google就是了。

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

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

第一步,解压安装包并设置环境变量
tar –xzvf tmake-1.13.tar.gz
tar –xzvf qt-x11-2.3.2.tar.gz
tar –xzvf
qt-embedded-2.3.10-free.tar.gz
mv qt-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
这个地方要注意 ,large 模式
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
make clean
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
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

二 Qt/E 的交叉编译

要将我们写好的程序发布到开发板上,我们需要对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
这步完成后,我们会在/$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
方法同上




三. 建立本机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
将本次实验所需的四个文件拷贝到/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

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
export
LD_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 &
sleep 10
./qpe.sh

四 Qtopia2.1.1 在2410-S 上的移植

软件:Redhat Linux9.0 for PC + minicom + Embeded Linux for 2410
e2fsprogs-libs-1.37.tar.gz,libjpeg-iwmmxt.tar.bz2,qt-embedded-2.3.10-free.tar.gz
,qtopia-free-source-2.1.1.tar.bz2,qt-x11-2.3.2.tar.gz,qt-x11-free-3.3.4.tar.bz2,
tmake-1.13.tar.gz,tslib.tar.gz,buildqtopia.sh

1.实验可以分为以下几个步骤进行:
(1) 在装有linux 的pc 机上安装交叉编译环境。安装光盘时所安装的编译器版本较低,不能正常编译QT程序,所以编译前需要安装Qt/tools/arm-linux-gcc-3.4.1.tar.bz2,并在/root/.bash_profile中修改编译器搜索路径。
(2) 编译库文件:
(3) 编译qt-x11-2.3.2:
(4) 编译安装qt-embedded-2.3.2
(5)编译安装QTOPIA
(6) 将需要拷贝到开发板上的文件整理到一个单独的文件夹里面
在本次实验中,buildqtopia.sh文件已为大家做好了以上几步,我们可以直接运行该文件进行编译。大家可以分析buildqtopia.sh 内容,掌握编译的步骤。

2. 编译步骤:
cd src
./buildqtopia.sh
当编译完成后,在src/qtopia-free-2.1.1/image/opt/Qtopia 下是编译完成的Qtopia 桌面环境。
说明:在编译完成后,src 下的各个目录对应如下软件包:
e2fsprogs-libs-1.37 ext2 文件系统工具包,Qtopia 用到了其中的libuuid
e2fs-install ext2 工具包编译结果
jpeg-6b jpeg 解码库
jpeg-install jpeg 编译结果
tslib 触摸屏工具包
tslib-install 触摸屏工具包编译结果
tmake-1.13 tmake 工具,编译Qtopia 时需要使用
qt-2.3.2 Qt/X11-2.3.2 及编译结果, 编译Qtopia 时需要使用其中的工具
qt-x11-free-3.3.4 Qt/X11-3.3.4 及编译结果,编译Qtopia 时需要使用其中的工具
qt-2.3.10 Qt/Embedded 2.3.10 及编译结果
qtopia-free-2.1.1 Qtopia 2.1.1 及编译结果

3. 安装步骤:
1) Qtopia
cd src/qtopia-free-2.1.1/image/opt/
tar cvjf /tmp/qtopia-install.tar.bz2 Qtopia
将/tmp/qtopia-install.tar.bz2 下载到目标机,并解压缩到某个目录,假设为/mnt/yaffs。
2) 相关文件
将src/qtopia.sh 下载到目标机的/usr/bin 目录下.将src/e2fs-install/lib/libuuid.so*下载到目标机的/usr/lib 目录下.将src/jpeg-install/lib/libjpeg.so*下载到目标机的/usr/lib 目录下
3) 目标机上的处理在目标机上执行:
cd /usr
ln -s /mnt/yaffs/Qtopia qpe
chmod +x /usr/bin/qtopia.sh
注: 光盘中没有提供qtopia.sh文件,下面是qtopia.sh文件
//qtopia.sh

#!/bin/sh
export QTDIR=/usr/qpe
export QPEDIR=/usr/qpe
export KDEDIR=/usr/qpe
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CONFFILE=/tmp/ts.conf
export TSLIB_CONSOLEDEVICE=none
export TSLIB_CALIBFILE=/tmp/ts-calib.conf
export
TSLIB_PLUGINDIR=/usr/qpe/lib
export QT_TSLIBDIR=/usr/qpe/lib/
export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/qpe/lib/
export QWS_SIZE=640x480
export
QWS_MOUSE_PROTO="TPanel:/dev/input/event0 USB"
export LANG=zh_CN
insmod
/mnt/yaffs/touchscreen/ts-uptech.o
cp /usr/qpe/etc/ts.conf /tmp
cd /usr/qpe/bin/
if [ "$1" = "c" ]; then
./ts_calibrate
fi
if [ -f "$TSLIB_CALIBFILE" ]; then
./qpe &>/dev/null
else
./ts_calibrate
./qpe &>/dev/null
fi
clear

你可能感兴趣的:(linux,虚拟机,redhat,gcc,qt)