Linux下实现Qt 4.6.3移植 (Ubuntu 10.10)

本文详细介绍Qt移植至嵌入式系统的全过程,包括环境搭建、交叉编译器安装、触摸屏校验工具配置、Qt库文件编译等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、移植准备(环境搭建)

1.1编译所需环境和资源

1、Qt源码包:Qt4.6源码包 :qt-everywhere-opensource-src-4.6.3.tar.gz

2、交叉编译工具:arm-linux-gcc-4.4.3-20100728.tar

3、触摸屏校验工具 :tslib-1.4.tar.gz

4、PC运行的OS 环境:Ubuntu10.10

5、mini/micro 2440开发板

1.2安装交叉编译器

把交叉编译工具包放到根目录下,执行命令如下:

$tar zxvf arm-linux-gcc-4.4.3-20100728.tar-C / 

解压后产生一个目录:/opt/FriendlyARM/toolschain/4.4.3,进入该目录,进入bin目录,执行命令如下:

$pwd >> /$HOME/.bashrc      #pwd >> /root/.bashrc 

接着执行命令如下:

$gedit /$HOME/.bashrc        #gedit /root/.bashrc 

然后修改最后一行:exportPATH=/opt/FriendlyARM/toolschain/4.4.3/bin:$PATH

为了使配置的环境立即生效,接着执行如下命令:

$source /$HMOE/.bashrc       #source /root/.bashrc 

查看版本信息,执行命令:

$arm-linux-gcc –v 

出现正确版本,说明配置交叉编译器成功。

1.3 安装触摸屏校验工具

把tslib-1.4.tar.gz放到一个目录下,比如/opt目录下。接着执行命令如下:

tar zxvf tslib-1.4.tar.gz 

执行命令cd tslib,进入tslib当前目录,接着执行命令如下:

source autogen.sh 

然后接着执行配置命令:

./configure     --prefix=/usr/local/tslib --host=arm-linuxac_cv_func_malloc_0_nonnull=yes 

最后执行编译命令和安装命令如下:

make  

make install 

如果以上步骤没错,则可以在/usr/local/tslib下出现我们需要的库文件,这些库文件我们移植时会用到。

1.4 编译Qt-4.6.3库文件

1.4.1 建立目录

首先在/home/username目录下新建/Qtenv文件夹,为了文件管理方便,再使用mkdir命令在Qtenv下分别建立三个文件夹:arm,x86,qtsdk。

qtsdk用于安装QT-X11;

x86用于存放QTE的x86版本。

arm用于存放QTE的arm版本;

1.4.2.安装QT-X11:

qt-sdk-linux-x86-opensource-2010.05.1.bin放在/qtsdk文件夹中

$ cd ~/Qtenv/qtsdk

$chmod u+x qt-sdk-linux-x86-opensource-2010.05.1.bin

$./qt-sdk-linux-x86-opensource-2010.05.1.bin

之后开始图形化的安装,然后选择安装目录为/home/username/Qtenv/qtsdk,一路NEXT。

1.4.3.解压QTE源代码包

1)将源代码包分别复制到/arm和/x86下:

直接在目录下复制即可,不必使用命令行操作。

2)解压缩:

$ cd Qtenv/arm

$ tar xzvf qt-everywhere-opensource-src-4.6.3.tar.gz

(解压gz文件用xzvf,解压bz2 文件用xjvf)

$ mv qt-everywhere-opensource-src-4.6.3 arm

(把/qt-everywhere-opensource-src-4.6.3目录下的文件放到/arm文件夹下,即改名为arm,方便输入)

$ cd Qtenv/x86

$tar xzvf qt-everywhere-opensource-src-4.6.3.tar.gz

 (解压gz文件用xzvf,解压bz2 文件用xjvf)
$ mv qt-everywhere-opensource-src-4.6.3 x86

(把/qt-everywhere-opensource-src-4.6.3目录下的文件放到/x86文件夹下,即改名为x86,方便输入)

1.4.4.解压缩后分别针对arm平台和x86平台进行编译配置

(1) 编译x86版本的QT

$ cd ~/Qtenv/x86

$ ./configure -prefix /home/alex/Qtenv/x86 -embedded x86 -nomake docs-nomake demo -nomake examples -qvfb

$ sudo make

$ sudo make install

sudo 获得root权限,否则可能出错。

此过程花费过多时间,大概几个小时左右,视电脑配置而定。

此过程出现错误较多,都可以解决,要有耐性。。。

过程中常见的错误解决方法,见bug列表的文档。

(2) 编译arm版本的QT

$ cd ~/Qtenv/arm

$ ./configure -opensource -confirm-license -release-shared -embedded arm -depths 16,18,24 -fast -optimized-qmake -pch-qt-sql-sqlite -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -little-endian-host-little-endian -no-qt3support -no-libtiff -no-libmng -no-opengl -no-mmx-no-sse -no-sse2 -no-3dnow -no-webkit -no-phonon -no-nis -no-opengl -no-cups-no-glib -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-separate-debug-info-nomake examples -nomake tools -nomake docs -qt-mouse-tslib-I/usr/local/tslib/include -L/usr/local/tslib/lib

$ sudo make

$ sudo make install

此编译工程中,编译arm版本的工具是arm-linux-g++、编译x86版本的工具是g++;编译的时候注意查看是否正确!尤其是arn的编译经常会出错,遇到错误,见错误bug列表文档。

技巧:

1)configure之后想清除重新来过,使用makeconfclean,再重新configure即可

2)make之后想清除重新来过,使用makeclean,再make 

1.4.5. 环境变量的设置

这个也是非常重要的一步,前面说的目录管理,在这一步显的非常重要了

我的处理方法是:在各文件夹下新建shell脚本文件。

1)QT-X11:

$ cd Qtenv/qtsdk

$ sudo gedit setenv.sh

添加如下内容:

PATH=/home/username/Qtenv/qtsdk/qt/bin:$PATH

LD_LIBRARY_PATH=/home/username/Qtenv/qtsdk/lib:$LD_LIBRARY_PATH

export PATH

export LD_LIBRARY_PATH

保存退出,文件放在Qtenv/qtsdk下!

2)x86:

$ cd Qtenv/x86

$ sudo gedit setenv.sh

添加如下内容:

QTEDIR=/home/username/Qtenv/qtsdk/x86

PATH=/home/username/Qtenv/qtsdk/x86/bin:$PATH

LD_LIBRARY_PATH=/home/username/Qtenv/qtsdk/x86/lib:$LD_LIBRARY_PATH

export QTEDIR

export PATH

export LD_LIBRARY_PATH

保存退出文件放在qtenv/x86下!

3)arm:

$ cd qtenv/arm

$ sudo gedit setenv.sh

添加如下内容:

QTEDIR=/home/username/Qtenv/qtsdk/arm

PATH=/home/username/Qtenv/qtsdk/arm/bin:$PATH

LD_LIBRARY_PATH=/home/username/Qtenv/qtsdk/arm/lib:$LD_LIBRARY_PATH

export QTEDIR

export PATH

export LD_LIBRARY_PATH

保存退出文件放在Qtenv/arm下!

在运行的时候分别运行对应的脚本即可,比如我们要用QT-X11:

cd /Qtenv/qtsdk

source setenv.sh

然后就可以用qmake、Creator等工具了.

注意:通过运行这几个shell脚本来改变环境变量。整个环境变量的改变只有在当前终端下才有效。当打开其他终端后,必须重新执行对应的shell脚本。

对应所在的路径,username为当前的用户名,领会意思就行。

1.4.6 独立编译qvfb

前面已经安装了QT-X11和QT for embedded linux,但是当使用QVFB的时候却发现没有安装QVFB。我安装QT-X11的时候是直接从NOKIA网站上下载的SDK,而不是源码包SRC,而 SDK中是不包含QVFB的,源码包也是需要编译的。经过一番折腾摸索,参考了很多资料,下面是详述。

1、安装QVFB,需要知道它在哪儿,我的QT-X11安装在/home/fengchao/qtenv/qtsdk/,而QVFB就是在 qtsdk/qt/tools/qvfb/下,需要经过编译安装才可以使用。编译需要由qmake所生成的makefile,所以要确保qmake可用; 然后需要make来把makefile生成可执行文件qvfb,然后就把它cp到home/fenchao/qtenv/x86/bin的目录下就可以 了。(因为qvfb是用来在电脑上演示用的,所以放在x86环境下)

$ cd Qtenv/qtsdk/    //qtsdk下的环境变量设置文件setenv.sh

$ source setenv.sh  //使QT-X11的环境变量生效

$ cd qt/tools/qvfb  

$ qmake

$ make

错误:

make的过程中出现一个典型错误:qvfb.cpp:51:24: error: deviceskin.h: No such file or directory

这个问题仍然是环境变量设置的问题,因为QT_SOURCE_TREE的设置使得make的时候找不到deviceskin.h。原因就在于DeviceSkin的代码没有被加入编译qvfb的工程中。

在qvfb.pro这个文件里,可用gedit打开查看

第37行include($[[QT_SOURCE_TREE]]/tools/shared/deviceskin/deviceskin.pri)
那么就需要设置一下该变量QT_SOURCE_TREE

解决方案:

1)首先定位到文件夹:Qtenv/qtsdk/

$ cd Qtenv/qtsdk/qt/tools/qvfb

$ gedit qvfb.pro

将第37行的代码改成如下的样子,或者也可以将$QT_SOURCE_TREE的变量设置好也可以,但是通过实践发现,直接修改的效果要好的多。

include(/home/username/Qtenv/qtsdk/qt/tools/shared/deviceskin/deviceskin.pri)

4)执行qmake,make编译,执行命令为

$ qmake

$ make

5)然后把qtsdk/qt/bin目录下的qvfb文件拷贝到x86/bin下

$ cp qtsdk/qt/bin/qvfb x86/bin

6)最后测试qvfb

$ cd x86

$ source setenv.sh

$ cd x86/bin

$ qvfb &

若出现小窗口(可能是黑色的屏幕),则表示qvfb安装成功;

若想使用qvfb则运行 ./app -qws指令即可,app为生成的可执行文件。

其中工程文件app.pro由qmake生成makefile,再运行make生成可执行文件app,然后运行 qvfb -width 800 -height 600 &,最后运行./app -qws即可执行。

如果在一些文件的make过程中出现错误则再根据错误提示解决即可,一般是缺乏安装文件。

错误可参考错误bug列表的文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值