我使用的Qt版本是4.8.5,其他版本的过程类似,可通过此方法制定Qt开发、运行环境。

移植的步骤如下:
1、下载新版qt;
2、编译tslib;
3、编译qt;
4、配置编译后的qt,以便在主机上用qmake编译适用目标板的qt应用;
5、拷贝lib文件到目标板。

一、下载qt和tslib

比如要安装4.8.5版本,则
下载 qt-everywhere-opensource-src-4.8.5.tar.gz,
官网下载地址:http://download.qt-project.org/archive/qt/。
下载tslib,
官方下载地址:https://github.com/kergoth/tslib;

二、编译tslib
1、编译安装tslib
将下载的tslib源码复制到工作目录,并解压:
    $ tar xzvf  tslib1.4.tar.gz
    $ cd tslib

2、配置环境
先安装automake、libtool 两个工具:

    $ sudo apt-get install automake libtool

如果还没有交叉编译器的路径添加到PATH,要先把该路径添加到PATH中;
    本例使用的交叉编译器的路径为/opt/FriendlyARM/toolschain/4.5.1/bin
    (一定要指定自己目标板的交叉编译器路径),
    则执行以下命令(临时声明环境变量):
  

$ export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin



3、编译
配置tslib,安装路径可以通过 --prefix 参数设置,这里安装到/usr/local/tslib:

$ ./autogen.sh 

     $ ./configure CC=arm-linux-gcc CXX=arm-linux-g++ \ 

         --prefix=/usr/local/tslib \ 

         --host=arm-linux ac_cv_func_malloc_0_nonnull=yes



编译安装:

$ make 

     $ sudo make install



    完成后,tslib会按安装到/usr/local/tslib目录下。
    进入下一步之前,
    先将/usr/local/tslib/etc/ts.conf文件第二行
            “#module_raw input”   注释去掉,
    变为    “module_raw input”,
    注意一定要顶格。

三、编译安装qt
1、解压

$ tar xvzf qt-everywhere-opensource-src-4.8.5.tar.gz 

     $ cd qt-everywhere-opensource-src-4.8.5



2、指定交叉编译器
打开解压目录下的mkspecs/qws/linux-arm-g++/qmake.conf:

$ vi mkspecs/qws/linux-arm-g++/qmake.conf


    
    用vi打开qmake.conf 后,加上-lts,然后保存退出,更改后如下:

# modifications to g++.conf 

     QMAKE_CC                = arm-linux-gcc -lts 

     QMAKE_CXX               = arm-linux-g++ -lts 

     QMAKE_LINK              = arm-linux-g++ -lts 

     QMAKE_LINK_SHLIB        = arm-linux-g++ -lts 

     # modifications to linux.conf 

     QMAKE_AR                = arm-linux-ar cqs 

     QMAKE_OBJCOPY           = arm-linux-objcopy 

     QMAKE_STRIP             = arm-linux-strip



3、配置Qt
    如下,先通过 --prefix 指定qt安装的路径,-I后面指定上一步tslib的include路径,-L后面指定上一步tslib的lib路径,

 

$ sudo mkdir /usr/local/qt4.8.5-arm 

     $ sudo ./configure --prefix=/usr/local/qt4.8.5-arm \ 

                 -opensource -release -shared -Declarative \ 

                 -importdir /opt/imports -fast -no-largefile \ 

                 -qt-sql-sqlite -qt3support -exceptions \ 

                 -xmlpatterns -no-glib -no-phonon -no-mmx \ 

                 -no-3dnow -no-sse -no-sse2 -svg -no-webkit \ 

                 -qt-zlib -qt-libtiff -qt-libpng -qt-libjpeg \ 

                 -make libs -make tools -nomake examples \ 

                 -nomake docs -nomake demo -no-nis -no-cups \ 

                 -iconv -no-dbus -xplatform qws/linux-arm-g++ \ 

                 -embedded arm -little-endian \ 

                 -qt-freetype -depths 16,24,32 \ 

                 -qt-gfx-linuxfb -qt-gfx-transformed \ 

                 -qt-gfx-multiscreen -no-gfx-vnc \ 

                 -no-gfx-qvfb -qt-kbd-linuxinput \ 

                 -no-kbd-qvfb -armfpa -no-mouse-qvfb \ 

                 -qt-mouse-linuxtp -qt-mouse-tslib \ 

                 -DQT_QLOCALE_USES_FCVT -DQT_NO_QWS_CURSOR \ 

                 -no-pch -I/usr/local/tslib/include \ 

                 -L/usr/local/tslib/lib -confirm-license



 
    可以执行./configure --help查看参数的详细说明,根据需要来配置合适的参数
            如果配置的时候提示:

      

The tslib functionality test failed! 

         You might need to modify the include and library search paths by editing 

         QMAKE_INCDIR and QMAKE_LIBDIR in 

         /home/gary/qt/qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-arm-g++.



            说明找不到合适的交叉编译工具,请重新设置PATH环境变量。
            如果还是不能解决,再修改mkspecs/qws/linux-arm-g++/qmake.conf,将交叉编译工具改为绝对路径,如下:   

      

# modifications to g++.conf 

         QMAKE_CC                = /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc -lts 

         QMAKE_CXX               = /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-g++ -lts 

         QMAKE_LINK              = /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-g++ -lts 

         QMAKE_LINK_SHLIB        = /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-g++ -lts 


         # modifications to linux.conf 

         QMAKE_AR                = /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-ar cqs 

         QMAKE_OBJCOPY           = /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-objcopy 

         QMAKE_STRIP             = /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-strip


4、 编译安装  

$ sudo make 

     $ sudo make install



    完成后,qt4.8.5即会安装到主机/usr/local/qt4.8.5-arm目录下。

四、配置编译后的qt,以便在主机上用qmake编译嵌入式qt应用
    如果要在终端使用qmake,则配置环境变量
    (注意不要与其他的qt环境变量冲突,不太确定的就不要配置,配置错误会产生非常严重的后果)
    如果使用Qt Creater则可以不用配置环境变量
1、设置环境变量
    在主机(如Ubuntu)当前终端下执行以下命令:

$ export PATH=$PATH:/usr/local/qt4.8.5-arm/bin 

     $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/qt4.8.5-arm/lib



    或将以上命令添加到/etc/profile 文件中,这样系统登录时就自动设置好这些环境变量。

五、移植Qt到开发板
    开发板上要使用的东西就2个,一个是编译后的tslib,一个是编译后qt目录下的lib目录。如下步骤将这两个目录拷贝到开发板上。
1、打包lib
    我们Qt 安装完成之后,为解决符号链接的问题,
    可以利用先打包,然后直接解压到开发板的做法:   

$ cd /usr/local/qt4.8.5-arm 

     $ tar -zcf lib.tar.gz lib 

     $ cd /usr/local 

     $tar -zcf tslib.tar.gz tslib



将打包好的压缩文件 lib.tar.gz 和 tslib.tar.gz 复制到开发板,然后解压:
   
 

mkdir -p /usr/local/qt4.8.5-arm 

     tar xzvf lib.tar.gz -C /usr/local/qt4.8.5-arm 

     tar xzvf tslib.tar.gz -C /usr/loacal



2、设置开发板上的环境变量
在目标板上新建一个名为setqtenv的文件,

  

vi setqtenv



并加入以下内容:

export LD_LIBRARY_PATH=/lib:$LD_LIBRARY_PATH 

     export QTDIR=/usr/local/qt4.8.5-arm 

     export T_ROOT=/usr/local/tslib 

     export PATH=$T_ROOT/bin:$PATH 

     export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib:$LD_LIBRARY_PATH 

     export TSLIB_CONSOLEDEVICE=none 

     export TSLIB_FBDEVICE=/dev/fb0 

     export TSLIB_TSDEVICE=/dev/input/event0 

     export TSLIB_PLUGINDIR=$T_ROOT/lib/ts 

     export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf 

     export TSLIB_CALIBFILE=/etc/pointercal 

     export QWS_KEYBOARD=USB:/dev/input/event1 

     export QWS_MOUSE_PROTO=Tslib:/dev/ input/event0 

     export QT_QWS_FONTDIR=$QTDIR/lib/fonts



执行以下命令设置好qt环境变量的设置:

source setqtenv



OK,所有工作完成,新的arm版本的QT可以使用了