QT:Ubuntu下 嵌入式Qt开发环境的搭建


转自:http://blog.csdn.net/lpp0900320123/article/details/24876159

一、qt的版本介绍

    按照不同的图形界面来划分,分为四个版本:

Win32版:适用于windows平台;

X11版:适用于各种X系统的Linux和Unix平台;

Mac版:适用于苹果的MacOS;

Embedded版:适用于具有帧缓冲(Frame buffer)的linux平台;

      Qtopia是基于qt开发的一个软件平台,Qtopia是构建于Qt/E之上的一系列应用程序,在这个平台上我们可以开发各种应用程序2008年,TrollTech公司被Nokia收购后,Qtopia被重新命名为Qt Extended。 Nokia在推出了Qt Extended的最新版Qt Extended 4.4.3之后的2009年3月3日,决定停止Qt Extended的后续开发,转而全心投入Qt的产品开发,并逐步会将一部分Qt Extended 的功能移植到Qt的开发框架中。

所以总的来说,QT也就三种:面向桌面的x11、面向嵌入式的Qt/E、以及面向嵌入式带各种应用程序的Qtopia桌面系统!!!

比如是Qt的各种版本介绍:

1.qt的安装程序(包含了QtCreatorQtAssistant

 

    Windows--x86--msvc2012_64_opengl :表示window平台,msvc2012可以与VS2012进行结合使用,64位应用程序,要求电脑装的是64位操作系统;opengl表示支持openGL的绘图模式

Windows--x86--mingw48_opengl window平台下的mingw48编译器进行编译。

2.Qt的库的源码包

    可以根据需要下载源码包:

 

3.Qt 安装包的下载

    下载网址:http://qt-project.org/downloads

如果想下载Qt的以前版本,可以在上面网址的最下面的一栏有个Archive for old versions ,进去就可以下载qt的以前版本了。

 

二、嵌入式Qt开发环境的搭建

1.预备知识

     嵌入式qt开发环境的安装方法很多,qt的版本也很多。有点让人不知所措,不知该按哪种方法去安装。刚开始总不知其几个版本之间的关系。现在也只知道其大概的一个关系,下面理清一下:据我所知的qt版本有:

    1 t-x11-opensource-src-4.3.2.tar.gz  

    2 qt-embedded-linux-opensource-src-4.4.0-rc1.tar.bz2 

    3 、qt-everywhere-opensource-src-4.8. 5.tar.gz

    4 、QtSdk-offline-linux-x86-v1.2.1.run

    5 、qt-creator-linux-x86-opensource-2.5.0.bin

    这些版本真有些让人眼花缭乱。后经过一番的研究和请教,终于对这几个版本之间的关系有点眉目了。

首先网上有人说安装 12,就可以了,因为1可以提供Qt designer 和qvbf,然后2可以提供嵌入式编译库,两者安装后就可以搭建一个嵌入式qt开发环境了,其实没错,不过已经过时了,因为现在有了Qt creatorQt creator 就包含了 Qt designerqvbf,因此我们仅仅安装5的版本就可以替代1的安装。不过2也还是要安装,不过了,像2那种版本的编译库现在已经有了更加齐全的库替代,那就是3了。而4就是5的升级版了,它不仅可以包含5拥有的所有东西,而且能开发嵌入式应用程序,不过暂时还没测试。

 

    构建Qt/Embeded的交叉编译环境需要3个Qt开发环境:

  Qt的桌面开发环境:在linux中全安装qt,用它编译好的程序后,可以直接用“./”运行。

  Qt/Embeded(x86)环境:在宿主机平台模拟编译和调试目标机程序的环境,带有qvfb功能,在PC机上可以模拟应用程序在arm开发板上的运行情况。用此编译好的程序,只用“./”命令不可以运行,必须加上参数 -qvfb -qws

  Qt/Embeded(ARM)交叉编译环境:编译好的程序,用于在arm平台上运行。  

首先要准备好交叉编译所需要的软件包:

(1)arm-linux-gcc-4.4.3-20100728.tar.gz(交叉编译环境)

(2)qt-everywhere-opensource-src-4.8.5.tar.gz(Qt的源码)

(3)qt-creator-linux-x86_64-opensource-2.5.2.bin(我的系统是64位,所以选择x86_64)

(4)tslib-1.4.tar.gz(触摸屏校验工具)

其中(2)和(3)在http://download.qt-project.org/archive/ 进行下载。

 

2.环境的搭建

2.1  系统环境

主机操作系统:ubuntu10.04

主机编译器:gcc4.4.3,

交叉编译器:arm-linux-gcc-4.3.3

2.2 安装交叉编译器

 (1)首先以root用户登入
 (2)复制arm-linux-gcc-4.3.2.tgz到根目录下tmp文件夹里
 (3)解压命令tar xvzf arm-linux-gcc-4.3.2 -C /
 注意以上命令必须要有-C而且是大写的后边有个空格也要注意

 (4)配置下编译环境路径 在控制台下输入 gedit /root/.bashrc 等一会出来文本编辑器后在文件最后(最后一行)加上 下面代码
 
export PATH=/opt/FriendlyARM/toolschain/4.4.3/bin:$PATH

重新打开一个终端,使上面的配置文件生效;输入命令 arm-linux-gcc  -v;  如果出现下面界面,就代表交叉编译器安装成功,会输出gcc的版本号(根据自己的交叉编译器配置就行了,并不一定是arm-linux-gcc,例如我的hi3531的交叉编译器是arm-hisiv200-linux-gcc 只要打出arm- 按tab键就可以看到了);

 

2.3 安装触摸屏校验工具(我自己没有安装,因为暂时没有触摸屏)

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

       #tar zxvf tslib-1.4.tar.gz 

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

       #./autogen.sh 

然后接着执行配置命令:

       #./configure     --prefix=/usr/local/tslib --host=arm-linux ac_cv_func_malloc_0_nonnull=yes 

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

      1.        make  

      2.        make install 

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

编译期间出现的错误:./autogen.sh: 4: autoreconf: not found

解决办法:sudo apt-get install autoconf automake libtool

2.4 安装QtCreator

qt-creator-linux-x86_64-opensource-2.5.2.bin (我自己安装的是qt-creator-linux-x86-opensource-2.4.1.bin)拷贝到linux系统中,在终端中把路径切换到qt-creator-linux-x86_64-opensource-2.5.2.bin所在的路径,运行命令:./qt-creator-linux-x86_64-opensource-2.5.2.bin  就会出现图形安装界面;下面的安装步骤就和我们在windows下安装软件差不多。

注意:下的版本要和你的操作系统相匹配,32位的系统下对应32位的应用程序;

2.5 编译Qt库源码

2.5.1 解压

    将源码qt-everywhere-opensource-src-4.8.5.tar.gz (我使用的是qt-everywhere-opensource-src-4.8.6.tar.gz)进行解压,并复制三份到/usr/local目录下,并分别命名为qt-pc,qt-x86,qt-arm。

 

2.5.2 编译PC版

进入qt-pc目录,执行如下操作:

#./configure

# make

# make install

编译过程中出现的问题:

出错:Basic XLibfunctionality test failed!

这个错误主要是因为,XLib库没有安装,所以在编译X11平台时,应该保证,以下命令正确执行:sudo apt-get install libx11-dev  libxext-dev libxtst-dev

注意:可以使用 make confclean 命令 把以前的配置信息清除掉,然后再重新配置。

出错:但当使用./configure编译时出现The specified system/compiler is not supported:

xxx/xxx/。。。。。。的提示,按照字面意思是系统或者编译工具不支持,终端输入export,终于明白是哪里出错了:

      QMAKESPEC=/xxx/xxxx/xxx/xxx这个环境变量指定的目录根本就不是我的qt源码所在的目录,就重新设一下该环境变量:
export QMAKESPEC=/root/qt-everywhere-opensource-src-4.7.4/mkspecs/linux-g++

重新./configure  指定目录,OK!


2.5.3 编译x86版(我没有编译)

进入qt-x86目录,执行如下操作:

# ./configure  -embedded x86    -qt-gfx-qvfb    -qt-kbd-qvfb   -qt-mouse-qvfb

# make

# make install

安装过程比较长,没有碰到过错误。

编译安装PC版中的 qvfb:

进入qt-pc/tools/qvfb/目录,执行如下操作:

#make

编译完毕,将qt-pc/bin目录下的qvfb文件复制到/usr/local/Trolltech/QtEmbedded-4.8.5/bin目录。

编译qvfb时,出现了如下错误:

x11keyfaker.cpp:48:34: 致命错误: X11/extensions/XTest.h:没有那个文件或目录

编译中断。make: *** [.obj/release-shared/x11keyfaker.o] 错误 1

 

解决方法:

        sudo apt-get install xorg-dev

 

如果makefile中没有-lXtst选项,则修改makefile 中 LIBS 选项: 添加 -lXtst选项

 

2.5.4 编译ARM版

  编绎源码
      2.5.4.1 指定编绎器类型
      #cd qt-embedded-linux-opensource-src-4.8.6
      #vim mkspecs/qws/linux-arm-g++/qmake.conf
      把所有的arm-linux-**改为arm-hisiv200-linux-**如下所示

#
# qmake configuration for building with arm-linux-g++
#
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)

# modifications to g++.conf
QMAKE_CC                = arm-hisiv200-linux-gcc
QMAKE_CXX               = arm-hisiv200-linux-g++
QMAKE_LINK              = arm-hisiv200-linux-g++
QMAKE_LINK_SHLIB        = arm-hisiv200-linux-g++

# modifications to linux.conf
QMAKE_AR                = arm-hisiv200-linux-ar cqs
QMAKE_OBJCOPY           = arm-hisiv200-linux-objcopy
QMAKE_STRIP             = arm-hisiv200-linux-strip

load(qt_config)
      2.5.4.2指定编绎时不编绎浏览器, 屏蔽webkit和browser,
      vim examples/examples.pro,屏蔽以下行(行首添加#)
      contains(QT_CONFIG, webkit): SUBDIRS += webkit

      vim demos/demos.pro,屏蔽以下两行(行首添加#)
      contains(QT_CONFIG, webkit):contains(QT_CONFIG, svg):SUBDIRS += demos_browser
      demos_browser.subdir = browser

必须加上“-prefix /usr/local/Trolltech/QtEmbedded-4.8.5-arm ”参数, 不然安装后不在QtEmbedded-4.8.5-arm文件夹下,而是覆盖了QtEmbedded-4.8.5。

新建myconfig文件,编辑如下(自己使用的是直接输出命令参数没有编辑文件,命令如下./configure -prefix  /usr/local/Trolltech/QtEmbedded-4.8.6-arm -opensource -no-qt3support -no-xmlpatterns -no-multimedia -no-phonon -no-svg -no-webkit -no-javascript-jit -no-script -no-scripttools -xplatform qws/linux-arm-g++ -no-openssl -nomake examples -nomake demos -embedded arm -little-endian -no-opengl):

#!/bin/sh

./configure \

-prefix  /usr/local/Trolltech/QtEmbedded-4.6.3-arm \ 

-opensource \

-confirm-license \

-release -shared \

-embedded arm \

-xplatform qws/linux-arm-g++ \

-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-openssl \

-no-webkit \

-no-qvfb \

-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
注:
-prefix  /usr/local/Trolltech/QtEmbedded-4.6.3-arm<span style="font-size:18px;"> </span><span style="font-size:18px;"> 指定qt的库文件,
-xplatform qws/linux-arm-g++: 表示使用arm-linux交叉编译器进行编译;
-embedded arm: 表示将编译针对arm平台的embedded版本;
<span style="font-family:黑体;">可以执行./configure --help查看参数的详细说明,根据需要来配置合适的参数
提高编译速度:
    使用选项-nomake examples –nomake demos –nomaketools过滤掉例子、演示和工具目录,他们不进行编译。
</span></span>

如果放弃配置,则使用命令:# make confclean

编译:# make

安装:# make install

最终会在/usr/local/Trolltech/QtEmbedded-4.8.6-arm下看到如下目录。
       bin demos examples include lib mkspecs plugins

 

安装完成后,在/usr/local/Trolltech目录中有三个文件夹:Qt-4.8.5、QtEmbedded-4.8.5、QtEmbedded-4.8.5-arm。

 

2.6 安装完后

2.6.1 qvfb的测试

 

运行qvfb,提示了如下错误,在网上也查了很多种解决办法,最后还是没有解决; 有的说要重新编译内核,并带上参数;觉得比较麻烦,就没有去尝试;不过这个错误并不影响我们仿真模拟Qt4程序。

2.6.2 QtCreator编译前的配置

   X86的调试编译与调试

1)打开QtCreator ,工具---->选项--->构建和运行 进行设置,在Qt版本菜单下,手动设置选择qmake路径。

 

2)打开QtCreator 对其进行设置,点击左边的项目,选择运行,对其进行设置,在参数里添加 -qws参数

 

(3)编译与运行

现在终端 输入命令:qvfb -width 800 -height 480 &    打开虚拟缓冲端;

然后就可以在QtCreator对程序进行编译、运行了;

 

 

运行结果如下:

 

 

 由于自己没有ARM版,现在移植的那部分还没有做,等以后自己做的话,自己会贴上去的。

3 移植Qt到开发板

3.1 移植需要的文件

      开发板上要使用的东西就2个,一个是编译后的tslib(我没有编译),一个是编译后qt目录下的lib目录。如下步骤将这两个目录拷贝到开发板上。

3.2 开发板环境变量设置

     网上的环境变量设置如下:

<pre name="code" class="cpp"><pre name="code" class="cpp"><pre name="code" class="cpp">export QTDIR=/mnt/usr/qt/hismall
<pre name="code" class="cpp">        export PATH=$QTDIR/bin:$PATH
        export TSLIB_CONSOLEDEVICE=none
        export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib
<span style="font-family:黑体;">设置的是PATH是/mnt/usr/qt/hismall
设置的LD_LIBRARY_PATH是/mnt/usr/qt/hismall/lib
根据自己的实际情况进行设置就可以了。</span>





我是将程序和链接库放在一个文件夹下了,编写了一个脚本run.sh

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
export QT_QWS_FONTDIR=.
export QWS_DISPLAY="linuxFB:/dev/fb4"

也就是说明lib在.目录下(当前目录下)字体文件也在当前目录下。

然后运行命令

source run.sh
设置一下环境变量就可以了。根据自己的需要可以将脚本写入开机加载的脚本中。

注:什么是QWS Client和QWS Server?
       QT Embedded也是一种C/S结构,需要有一个QT application做QWS Server,程序启动时带有-qws参数的就是QWS Server,不带这个参数就是QWS Client。
       因此任何一个基于QT的application都可以做QWS Server。当然QWS Server一定先于QWS Client启动,否则QWS Client将启动失败。在实际应用中,
       会指定某个特殊的application做QWS Server,这个application一般还会管理一些其它的系统资源。

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章