板上移植QT-4及环境搭建(带TSLIB触摸屏支持)

11 篇文章 0 订阅
10 篇文章 0 订阅

目录

一、文档简介: 4

二、移植过程 4

1.安装交叉编译工具链 4

2.交叉编译TSLIB工具 4

3.交叉编译QT-4 5

4. configure参数选项以及QT库裁剪 6

4.1 configure参数分类 6

4.3 QT库裁剪 11

5.QT程序移植及运行环境配置 20

一、文档简介:

本文档用于介绍Loongson 1B开发板上移植QT-4以及相关运行环境的搭建。

开发环境参数:

操作系统:Ubuntu 11.04

本机平台:X86

目标平台:Loongson 1B 开发板

交叉编译工具链:gcc-3.4.6-2f1B交叉编译工具链)

所需软件及工具包:

QT源码包:qt-everywhere-opensource-src-4.7.1.tar.gz

TSLIB源码包:tslib-1.4.tar.gz

二、移植过程

1.安装交叉编译工具链

首先安装Loongson 1B开发板提供的交叉编译工具链:

解压gcc-3.4.6-2f.tar.gzPS.有些工具链对目录有一定的要求,请询问交叉编译工具链提供者,gcc-3.4.6-2f 需要放在/home/cpu/目录下面。

#tar zxvf gcc-3.4.6-2f.tar.gz

#mv gcc-3.4.6-2f /home/cpu/

将工具链加入到PATH环境变量中:

#export PATH=/home/cpu/gcc-3.4.6-2f/bin:$PATH

PS.每一次需要交叉编译均需要将交叉编译工具链加入到PATH变量,可通过修改/etc/profile文件来实现默认添加,即将上边最后一条语句加入到该文件中即可。

2.交叉编译TSLIB工具

解压tslib-1.4.tar.gz,进入文件夹交叉编译TSLIB工具,并指定工具安装目录为/TSLIB

# tar zxvf tslib-1.4.tar.gz

# cd tslib-1.4

# ./autogen.sh

#./configure --host=mipsel-linux ac_cv_func_malloc_0_nonnull=yes

--prefix=/TSLIB

# make

# make install

编译完成后,TSLIB目录需包含以下文件目录:

# ls /TSLIB

bin  etc  include  lib

各个目录分别为TSLIB的校准及测试程序、环境配置文件、头文件、动态库。

根据1B开发板触摸屏驱动类型,配置TSLIB,修改TSLIB的环境配置文件:修改/TSLIB/etc/ts.conf,将# module_raw input改成module_raw input,即去掉前面的注释符。PS.这里需要注意的是module_raw input前面不允许有空格。

3.交叉编译QT-4

首先解压QT-4.7.1源码包并重命名后进入改目录以配置环境变量:

# tar zxvf  qt-everywhere-opensource-src-4.7.1.tar.gz

#mv qt-everywhere-opensource-src-4.7.1/ qt-embedded-free-4.7.1-tslib-test/

# cd  qt-embedded-free-4.7.1-tslib-test/

# export  QTDIR=$PWD

# export  QTEDIR=$PWD

# export  LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

# export  PATH=$QTDIR/bin:$PATH

执行以上步骤即可配置好QT的编译环境变量。

接下来需要修改相关的QT编译参数:

# vim mkspecs/qws/linux-mips-g++/qmake.conf

确保文件中指定的交叉编译参数为gcc-3.4.6-2f 交叉编译工具链中对应gcc名称,并制定平台指令集。主要修改以下标记为yellow的参数:

Filemkspecs/qws/linux-mips-g++/qmake.conf

#

# qmake configuration for building with mipsel-linux-g++

#

include(../../common/g++.conf)

include(../../common/linux.conf)

include(../../common/qws.conf)

# modifications to g++.conf

QMAKE_CC                = mipsel-linux-gcc

QMAKE_CXX               = mipsel-linux-g++

QMAKE_CFLAGS           += -mips32

QMAKE_CXXFLAGS         += -mips32

QMAKE_LINK              = mipsel-linux-g++

QMAKE_LINK_SHLIB        = mipsel-linux-g++

# modifications to linux.conf

QMAKE_AR                = mipsel-linux-ar cqs

QMAKE_OBJCOPY           = mipsel-linux-objcopy

QMAKE_STRIP             = mipsel-linux-strip

load(qt_config)

QT-4对于TSLIB触摸屏的支持相对QT-3来说就简单很多了,不需要对QT的源码进行修改,仅需要在configure时指定TSLIB参数即可,接下来开始进行QT-4的交叉编译过程:

#./configure -release -shared -no-largefile -qt-sql-sqlite -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse -no-sse2   -no-svg -no-webkit -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis   -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-mips-g++ -embedded mips  -qt-freetype -depths 8,16,24,32  -qt-gfx-linuxfb   -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc   -no-gfx-qvfb -no-glib -qt-mouse-tslib -I/TSLIB/include -L/TSLIB/lib -prefix /usr/local/Trolltech/QtEmbedded-4.7.1-mips/

#make

#make install

可在/usr/local/Trolltech/QtEmbedded-4.7.1-mips/目录查看到编译生成文件。

编译过程可能遇到的问题:

提示找不到头文件、函数未定义或者提示/usr/bin/ld: cannot find -lxxx,其中xxx即表示函式库文件名称,其命名规则是:lib+库名(xxx)+.so,会发生这样的原因有以下三种情形:

1.系统没有安装相对应的lib

2.相对应的lib版本不对

3.lib(.so)symbolic link 不正确,没有连结到正确的函式库文件(.so)

解决方法:

(1)先判断在/usr/lib 下的相对应的函式库文件(.so) symbolic link 是否正确,若不正确改成正确的连结目标即可解决问题。

(2)若不是symbolic link 的问题引起,而是系统缺少相对应的lib安装lib即可解决。

(3)如何安装缺少的lib先搜寻相对应的LIB再进行安装

#apt-cache search libxxx-dev

#apt-get install libxxx-dev

若搜索到相关项,执行安装即可,若搜索不到,可上网搜索相关内容,此种错误一般很容易在网上找到解决方法。

4. configure参数选项以及QT库裁剪

4.1 configure参数分类

QT的源码包目录中执行以下指令可查看configure的详细参数:

#./configure --help

Usage: configure [-h] [-prefix <dir>] [-prefix-install] [-bindir <dir>] [-libdir <dir>]
[-docdir <dir>] [-headerdir <dir>] [-plugindir <dir> ] [-datadir <dir>]
[-translationdir <dir>] [-sysconfdir <dir>] [-examplesdir <dir>]
[-demosdir <dir>] [-buildkey <key>]

以下是QT基本参数:
[-release] [-debug][-debug-and-release] [-developer-build]
[-shared] [-static] [-no-fast] [-fast] [-no-largefile]
[-largefile] [-no-exceptions] [-exceptions] [-no-accessibility]
[-accessibility] [-no-stl] [-stl] [-no-sql-<driver>] [-sql-<driver>]
[-plugin-sql-<driver>] [-system-sqlite] [-no-qt3support] [-qt3support]
[-platform] [-D <string>] [-I <string>] [-L <string>] [-help]

以下是对QT所支持模块的设置参数
[-qt-zlib] [-system-zlib] [-no-gif] [-qt-gif] [-no-libtiff] [-qt-libtiff] [-system-libtiff]
[-no-libpng] [-qt-libpng] [-system-libpng] [-no-libmng] [-qt-libmng]
[-system-libmng] [-no-libjpeg] [-qt-libjpeg] [-system-libjpeg] [-make <part>]
[-no-make <part>] [-R <string>] [-l <string>] [-no-rpath] [-rpath] [-continue]
[-verbose] [-v] [-silent] [-no-nis] [-nis] [-no-cups] [-cups] [-no-iconv]
[-iconv] [-no-pch] [-pch] [-no-dbus] [-dbus] [-dbus-linked]
[-no-separate-debug-info]

以下是第三方库的支持参数:
[-no-mmx] [-no-3dnow] [-no-sse] [-no-sse2]
[-qtnamespace <namespace>] [-qtlibinfix <infix>] [-separate-debug-info]
[-armfpa][-no-optimized-qmake] [-optimized-qmake] [-no-xmlpatterns]
[-xmlpatterns][-no-phonon] [-phonon] [-no-phonon-backend]
[-phonon-backend][-no-openssl] [-openssl] [-openssl-linked]
[-no-gtkstyle] [-gtkstyle] [-no-svg] [-svg] [-no-webkit] [-webkit]
[-no-scripttools] [-scripttools]

以下是QT模块安装路径配置参数:

PS.以下选项都是可选,通过他们指定安装目录,不指定则用默认目录。选项前标记*的则为系统默认,+则为添加才有效那种
-prefix <dir> .......... 指定安装目录默认在 /usr/local/Trolltech/QtEmbedded-4.X.X
-hostprefix [dir] ..... 指定可扩展的工具库安装路径,默认当前目录
* -prefix-install ..... 指定QT的本地安装至/usr/local/Trolltech/QtEmbedded-4.X.X,此选项优先于-PREFIX

PS.以下选项用来指定分开安装不同部分,比如希望将可执行的放在/usr/bin 将库文件放在/lib下等等
-bindir <dir> .......... 指定可执行文件路径 <dir>(默认 PREFIX/bin)
-libdir <dir> ........... 指定库文件路径 <dir>(默认 PREFIX/lib)
-docdir <dir> .......... 指定文档路径 <dir>(默认 PREFIX/doc)
-headerdir <dir> ..... 指定头文件路径 <dir>(默认 PREFIX/include)
-plugindir <dir> ...... 指定插件路径 <dir> (默认 PREFIX/plugins)
-datadir <dir> ........... 指定QT要使用到的一些数据文件所在路径 <dir> (默认 PREFIX)
-translationdir <dir> .. 指定QT程序的翻译文件路径 <dir>(默认 PREFIX/translations)
-sysconfdir <dir> ...... 指定QT的设置文件路径 <dir>(默认 PREFIX/etc/settings)
-examplesdir <dir> ... 指定实例文件, <dir>(默认 PREFIX/examples)
-demosdir <dir> ........ 指定demos的安装路径 <dir> (默认 PREFIX/demos)

以下选项可以匹配自定义插件:

- buildkey <key> ...... 通过指定的key生成QT库和插件。

4.2 configure参数详解

下边将对关键参数进行描述说明:

A. 配置选项:

PS.默认的选项(*),可选添加选项(+)
* -release .............. 加上此选项编译程序QT不会做出优化,往往在开发过程使用此选项,是默认选项
-debug .................... 此选项在编译过程QT会对程序进行优化,在发布软件的时候应该用此选项
-debug-and-release ..编译两个版本
-developer-build..... 编译Qt的开发商和连接选项(包括自动测试出口的Qt
-opensource............ 以开源版本发布程序
-commercial........... 以商业版本发布程序
* -shared ............... 创建和使用共享Qt库。
-static .................... 创建和使用静态的Qt库。
* -no-fast ............. 使用通常的Makefile来编译,是默认选项
-fast ...................... 快速编译,除了封装必要的库,部分步骤省略或者用快速的方法处理
-no-largefile ......... 禁用大文件支持。
+ -largefile ........... 支持访问大于4GB的文件
* -no-exceptions . 禁用编译器本身对异常的处理
-exceptions ......... ..启用编译器本身对异常的处理
-no-accessibility ..
* -accessibility ... 禁用/启用无障碍支持
-no-stl .................
* -stl ................... 禁用/启用STL支持
-no-sql-<driver> ..禁用SQL
-qt-sql-<driver> ...根据需求启用SQL插件(默认全部关闭)
-plugin-sql-<driver> 禁用/启用/启用插件 对SQL的支持
-system-sqlite ..... 启用支持sqlite也可用-qt-sqlite
-no-qt3support .....
* -qt3support ........ 禁用/启用qt3支持模块
-no-xmlpatterns ....
+ -xmlpatterns ....... 禁用/启用xmlpatterns模块
-no-phonon .........
+ -phonon ............ 禁用/启用Phonon模块(可以理解为声音控制模块)
-no-phonon-backend..
+ -phonon-backend..... 禁用/启用phonon-backend模块
-no-svg ............
+ -svg ............... 禁用/启用svg模块
-no-webkit .........
+ -webkit ............ 禁用/启用webkit模块(访问网络模块)
-no-scripttools ....
+ -scripttools ....... 禁用/启用scripttools模块
-platform target ... .MIPS平台指定模块 (qws/linux-mips-g++)
-no-mmx ............ 
-no-3dnow .........
-no-sse ...............
-no-sse2 ............. 以上四个分别是取消对mmx、mmx、sse、sse2 指令集的支持
-qtnamespace <name> 指定所有库代码路径.
-qtlibinfix <infix>    重命名所有.so库文件到指定路径
-D <string> ........ 添加一个预处理器
-I <string> ........ 添加一个明确的头文件路径
-L <string> ........ 添加一个明确的库文件路径
-help, -h .......... 显示帮助信息

B. 第三方库选项:

PS.用于个性化定制QT,一般项目需要什么插件就加上进行编译即可。
-qt-zlib ..............
+ -system-zlib .. zlib依赖包
-no-gif .............
* -qt-gif ........... gif图片支持包See also src/plugins/imageformats/gif/qgifhandler.h
-no-libtiff ........
-qt-libtiff ......... tiff支持插件
+ -system-libtiff .... 默认是-system调用系统的,出错的话可以尝试用-qtqt的在编译过程不容易出错
-no-libpng ........
-qt-libpng ......... png图片支持插件
+ -system-libpng ....
-no-libmng .........
-qt-libmng ......... mng支持插件
+ -system-libmng .....
-no-libjpeg .........
-qt-libjpeg .......... jpeg图片支持插件
+ -system-libjpeg ..
-no-openssl ..........
+ -openssl ............ openssl支持插件
-openssl-linked ....
-ptmalloc .......... 系统内存分配器

C. 扩展选项:

PS.扩展选项,模块的选择等,使编译更加人性化。
-make <part> ........ 选择是否编译某些无关紧要的子模块
-nomake <part> .....(例如不想编译系统自导的demos则可使用-nomake demos
-R <string> ........... 添加一个动态库
-l <string> ............ 添加一个静态库
-no-rpath ...............
+ -rpath ................ 是否将生成的库安装在软件的安装目录,默认是在安装目录,否则自己指定路径

-continue .............. 忽略错误一路前奔的编译,因为一般情况是按照模块逐个编译碰到错误就停止。加上此参数是全部编译最后处理
-verbose, -v ......... 显示每个步骤的详细信息
-silent ................. 安静的编译省略信息回显
* -no-optimized-qmake ...
-optimized-qmake ...... 禁用/开启qmake的优化作用
-no-nis ............
* -nis ............... 禁用/开启NIS的支持
-no-cups ...........
* -cups .............. 禁用/开启对CUPS的支持,需要 cups/cups.h and libcups.so.2
-no-iconv ..........
* -iconv ............. 禁用/开启对iconv的支持.
-no-pch ............
* -pch ............... 禁用/开启是否使用预处理器头文件
-no-dbus ...........
+ -dbus .............. 禁用/开启对QTdbus模块的编译
-dbus-linked .......
-reduce-relocations ..... 减少因为链接优化而导致的而外的库文件重置
-no-separate-debug-info . 不将调试信息放在一个文件内
* -separate-debug-info .... 将调试信息放在一个文件内

D. 嵌入式 QTE编译选项:
-xplatform target ...........交叉编译过程指定目标平台

例如MIPS平台指定模块(qws/linux-mips-g++)
-no-feature-<feature> ...不编译<feature>.
-feature-<feature> ...... 编译<feature> 可选featuresrc/corelib/global/qfeatures.txt文件内可查寻
-embedded <arch> ..... 指定嵌入式平台的类型例如:arm mips x86 generic
-armfpa .......................
-no-armfpa ................. 禁用/启用armfpa浮点格式支持

-little-endian .......... 指定字节顺序为小字节序、低字节序
-big-endian ............ 指定字节顺序为大字节序、高字节序
-host-little-endian . ..指定主机平台字节顺序为小字节序、低字节序
-host-big-endian ..... 指定主机平台字节顺序为大字节序、高字节序
注:只需指定目标平台的字节顺序,否则将会选用主机的字节顺序
-no-freetype ........
-qt-freetype ........ 禁用/启用对freetype 模块的支持
* -system-freetype ....
-qconfig local ..... 默认配置的情况下系统使用src/corelib/global/qconfig-local.h
-depths <list> ..... 支持显示设备的位深度。有1, 4, 8, 12, 15, 16, 18, 24, 32 and 'all'
-qt-decoration-<style> ....指定编译后的界面风格默认是windows
-plugin-decoration-<style> 指定插件风格默认windows
-no-decoration-<style> ....不知定风格采用默认选项
-no-opengl ..........
-opengl <api> ....... 禁用/开启对opengl的支持
注意:使用此选项的前提条件是硬件支持且可以驱动
-qt-gfx-<driver> ... 指定显示设备驱动库
参考选项为:[ linuxfb transformed qvfb vnc multiscreen ]
-plugin-gfx-<driver> 指定显示插件驱动库
参考选项为:[ ahi directfb hybrid linuxfb powervr qvfb transformed vnc ]
-no-gfx-<driver> ... 不加载显示设备
参考选项为: [ linuxfb transformed qvfb vnc multiscreen ]
-qt-kbd-<driver> ... 指定图形界面下的键盘驱动库
参考选项为: [ tty usb sl5000 yopy vr41xx qvfb ]
-plugin-kbd-<driver> E指定图形界面下键盘插件驱动库
参考选项为: [ linuxis sl5000 usb vr41xx yopy ]
-no-kbd-<driver> ... 不加载指定驱动
参考选项为: [ tty usb sl5000 yopy vr41xx qvfb ]
-qt-mouse-<driver> ... 指定图形界面下鼠标驱动库
参考选项为: [ pc bus linuxtp yopy vr41xx tslib(触摸屏选这个) qvfb ]
-plugin-mouse-<driver> 鼠标插件驱动库
参考选项为: [ bus linuxis linuxtp pc tslib vr41xx yopy ]
-no-mouse-<driver> ... 指定不加载的鼠标驱动库模块
参考选项为: [ pc bus linuxtp yopy vr41xx tslib qvfb ]
-iwmmxt ............ 编译使用iwmmxt指令集,方便对某些XScale CPUs的支持
-no-glib ...........
+ -glib .............. 禁用/启用对glib的支持

4.3 QT库裁剪

首先我们看看前边编译成功的QT-4的库的大小:

# du -sh *.so.4.7.1

3.5M libQtCore.so.4.7.1

4.1M libQtDeclarative.so.4.7.1

13M libQtGui.so.4.7.1

124K libQtMultimedia.so.4.7.1

1.2M libQtNetwork.so.4.7.1

2.8M libQtScript.so.4.7.1

980K libQtScriptTools.so.4.7.1

824K libQtSql.so.4.7.1

168K libQtTest.so.4.7.1

324K libQtXml.so.4.7.1

对于一个基本的QT程序,libQtGui以及libQtCore这两个基本库是必须的,也就是即便是运行一个最简单的HelloWorld 程序,也至少需要占据16.5M大小的存储空间,这对于有限的嵌入式板子资源来说是一个极大的浪费,最好的方法是进行个性化定制QT开发包,通过裁剪QT库来减少板上资源浪费,同时也有利于提高QT程序在板上的运行速度,具体方法如下:

A.通过configure参数对编译树进行简单裁剪:

Qt-4开始采用了模块化的形式,将独立的功能封装在独立的库里,所以可以很简单的去掉一些不需要的库,这样也能节省编译时间和对硬盘空间的占用。 Qtconfigure配置提供了一些设置模块的方法,参考上边的configure参数详解部分,编译之前确定哪些功能是不必要的,我们可以通过configure的时候加这些选项就可以加上或者去掉相应模块的支持。例如在configure参数中加入-no-phonon-no-webkit-no-qt3support,即可裁剪掉多媒体控制模块、访问网络模块、QT3兼容模块等,下边提供一个成功编译的configure的设置例子:

./configure -release -shared -fast -no-largefile -no-exceptions -no-accessibility  -no-stl -no-sql-sqlite -no-qt3support -no-xmlpatterns  -no-multimedia  -no-audio-backend -no-phonon -no-phonon-backend -no-svg -no-webkit  -no-javascript-jit -no-script  -no-scripttools -no-declarative  -no-declarative-debug -no-mmx -no-3dnow -no-sse -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-gif -no-libtiff -qt-libjpeg -no-openssl -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis   -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-mips-g++ -embedded mips  -no-iconv -no-gtkstyle -no-nas-sound -no-opengl -no-openvg -no-sm  -no-xshape  -no-xvideo  -no-xsync -no-xinerama  -no-xcursor  -no-xfixes  -no-xrandr -no-xrender -no-mitshm    -no-xinput   -no-xkb -no-glib  -qt-freetype -depths 8,16,24,32  -qt-gfx-linuxfb   -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc   -no-gfx-qvfb   -no-glib -no-declarative-debug 

编译完成后再查看QT库的大小:

# du -sh *.so.4.7.1

3.5M lib/libQtCore.so.4.7.1

13M lib/libQtGui.so.4.7.1

1.2M lib/libQtNetwork.so.4.7.1

272K lib/libQtSql.so.4.7.1

168K lib/libQtTest.so.4.7.1

324K lib/libQtXml.so.4.7.1

可以发现基本库大小并未有多少裁剪,但是相应的模块减少了。由此可以知道通过configure设置参数裁剪可以裁剪模块,通过裁剪模块可以减少编译时间,同时减少部分非必须模块导致的编译错误,但是无法改变一些固有的基本模块,那么我们若需要进一步裁剪,则需要通过以下方式。

B.通过QT提供的qconfig工具进行对模块定制:

Qt的嵌入式版本支持feature裁剪,我们可以充分利用这一特性让对Qt模块进行定制。具体的做法是要做一个自己的qconfig-xxx.h特性文件,该文件中定义你要定制Qt中的哪些feature。在configure的时候加“-qconfig xxx选项, Qt就会根据你给出的配置文件来编译,以达到裁剪的目的。QT默认不裁剪任何feature。所有Qt预定义好的qconfig文件,可以在src/corelib/global/下找到,包括qconfig-minimal.h, qconfig-small.h, qconfig.medium.h,qconfig-large.hqconfig-dist.h,也就是从裁剪量由多到少都有据可依。如果要添加你自己的配置文件,要在src/corelib/global下建立一个形如qconfig-xxx.h的文件,这里的xxx也就是你要在configure的时候传入的qconfig参数。

Qt里还提供了一个可视化的配置依赖的工具——qconfig该工具的源码包在$QTDIR/tools/qconfig目录。需要我们自己手动编译,需要注意的是该工具需要基于开发环境的Qt桌面版本编译,不需要进行交叉编译:

首先在本机的Ubuntu系统中安装QT-4

# apt-get install libqt4-dev qt4-dev-tools libqt4-gui

安装完成后重新打开新的终端,目的是为了清除之前加入的QT环境变量,然后进入QT的源码包,然后执行以下命令:

# cd  tools/qconfig

# /usr/share/qt4/bin/qmake -project

# /usr/share/qt4/bin/qmake

# make

编译完成后,在当前目录生成一个qconfig的可执行程序。

# ./qconfig

然后选择QT-4源码包路径下的src/corelib/global/目录中的qfeatures.txt文件,如下图所示


然后展开各个选项,得到如下图所示可视化选择界面:


通过勾选每个模块中的选项,即可对各个模块进行个性化配置。需要注意的是通过单击选项可以在右边区域看到模块详细信息,其中列出了所属模块信息以及依赖,即不同模块之间所存在依赖关系,若将某些我们需要的模块所依赖的其他模块裁剪掉了,则在编译过程中会报错。

定制好相关模块的选项后,点击File->Save As,选择源码包中的src/corelib/global/目录,填上自定义File name,例如qconfig-example.h,点击保存,即可生成所需的配置文件。

下边提供一个编译通过的qconfig-example.h文件:

Filesrc/corelib/global/qconfig-example.h

/* D-Bus */

#ifndef QT_NO_DBUS

#  define QT_NO_DBUS

#endif

/* Dialogs */

#ifndef QT_NO_COLORDIALOG

#  define QT_NO_COLORDIALOG

#endif

#ifndef QT_NO_ERRORMESSAGE

#  define QT_NO_ERRORMESSAGE

#endif

#ifndef QT_NO_FILEDIALOG

#  define QT_NO_FILEDIALOG

#endif

#ifndef QT_NO_PRINTDIALOG

#  define QT_NO_PRINTDIALOG

#endif

#ifndef QT_NO_WIZARD

#  define QT_NO_WIZARD

#endif

/* Images */

#ifndef QT_NO_IMAGEFORMAT_BMP

#  define QT_NO_IMAGEFORMAT_BMP

#endif

#ifndef QT_NO_IMAGEFORMAT_PPM

#  define QT_NO_IMAGEFORMAT_PPM

#endif

#ifndef QT_NO_IMAGEFORMAT_XBM

#  define QT_NO_IMAGEFORMAT_XBM

#endif

#ifndef QT_NO_IMAGEFORMAT_XPM

#  define QT_NO_IMAGEFORMAT_XPM

#endif

#ifndef QT_NO_MOVIE

#  define QT_NO_MOVIE

#endif

/* ItemViews */

#ifndef QT_NO_DATAWIDGETMAPPER

#  define QT_NO_DATAWIDGETMAPPER

#endif

#ifndef QT_NO_LISTVIEW

#  define QT_NO_LISTVIEW

#endif

#ifndef QT_NO_PROXYMODEL

#  define QT_NO_PROXYMODEL

#endif

#ifndef QT_NO_STANDARDITEMMODEL

#  define QT_NO_STANDARDITEMMODEL

#endif

#ifndef QT_NO_TABLEVIEW

#  define QT_NO_TABLEVIEW

#endif

#ifndef QT_NO_TREEVIEW

#  define QT_NO_TREEVIEW

#endif

/* Kernel */

#ifndef QT_NO_TEXTHTMLPARSER

#  define QT_NO_TEXTHTMLPARSER

#endif

#ifndef QT_NO_XMLSTREAM

#  define QT_NO_XMLSTREAM

#endif

/* Networking */

#ifndef QT_NO_BEARERMANAGEMENT

#  define QT_NO_BEARERMANAGEMENT

#endif

#ifndef QT_NO_COP

#  define QT_NO_COP

#endif

#ifndef QT_NO_HOSTINFO

#  define QT_NO_HOSTINFO

#endif

#ifndef QT_NO_NETWORKDISKCACHE

#  define QT_NO_NETWORKDISKCACHE

#endif

#ifndef QT_NO_NETWORKINTERFACE

#  define QT_NO_NETWORKINTERFACE

#endif

#ifndef QT_NO_NETWORKPROXY

#  define QT_NO_NETWORKPROXY

#endif

#ifndef QT_NO_UDPSOCKET

#  define QT_NO_UDPSOCKET

#endif

#ifndef QT_NO_URLINFO

#  define QT_NO_URLINFO

#endif

/* Painting */

#ifndef QT_NO_PRINTER

#  define QT_NO_PRINTER

#endif

#ifndef QT_NO_CUPS

#  define QT_NO_CUPS

#endif

/* Phonon */

#ifndef QT_NO_PHONON_ABSTRACTMEDIASTREAM

#  define QT_NO_PHONON_ABSTRACTMEDIASTREAM

#endif

#ifndef QT_NO_PHONON_AUDIOCAPTURE

#  define QT_NO_PHONON_AUDIOCAPTURE

#endif

#ifndef QT_NO_PHONON_EFFECT

#  define QT_NO_PHONON_EFFECT

#endif

#ifndef QT_NO_PHONON_MEDIACONTROLLER

#  define QT_NO_PHONON_MEDIACONTROLLER

#endif

#ifndef QT_NO_PHONON_OBJECTDESCRIPTIONMODEL

#  define QT_NO_PHONON_OBJECTDESCRIPTIONMODEL

#endif

#ifndef QT_NO_PHONON_PLATFORMPLUGIN

#  define QT_NO_PHONON_PLATFORMPLUGIN

#endif

#ifndef QT_NO_PHONON_SEEKSLIDER

#  define QT_NO_PHONON_SEEKSLIDER

#endif

#ifndef QT_NO_PHONON_SETTINGSGROUP

#  define QT_NO_PHONON_SETTINGSGROUP

#endif

#ifndef QT_NO_PHONON_VIDEO

#  define QT_NO_PHONON_VIDEO

#endif

#ifndef QT_NO_PHONON_VOLUMESLIDER

#  define QT_NO_PHONON_VOLUMESLIDER

#endif

/* Styles */

#ifndef QT_NO_STYLE_MOTIF

#  define QT_NO_STYLE_MOTIF

#endif

#ifndef QT_NO_STYLE_WINDOWSXP

#  define QT_NO_STYLE_WINDOWSXP

#endif

/* Utilities */

#ifndef QT_NO_ANIMATION

#  define QT_NO_ANIMATION

#endif

#ifndef QT_NO_DESKTOPSERVICES

#  define QT_NO_DESKTOPSERVICES

#endif

#ifndef QT_NO_GESTURES

#  define QT_NO_GESTURES

#endif

#ifndef QT_NO_STATEMACHINE

#  define QT_NO_STATEMACHINE

#endif

#ifndef QT_NO_SYSTEMTRAYICON

#  define QT_NO_SYSTEMTRAYICON

#endif

#ifndef QT_NO_UNDOCOMMAND

#  define QT_NO_UNDOCOMMAND

#endif

/* Widgets */

#ifndef QT_NO_GROUPBOX

#  define QT_NO_GROUPBOX

#endif

#ifndef QT_NO_LCDNUMBER

#  define QT_NO_LCDNUMBER

#endif

#ifndef QT_NO_CONTEXTMENU

#  define QT_NO_CONTEXTMENU

#endif

#ifndef QT_NO_DOCKWIDGET

#  define QT_NO_DOCKWIDGET

#endif

#ifndef QT_NO_TOOLBAR

#  define QT_NO_TOOLBAR

#endif

#ifndef QT_NO_MENUBAR

#  define QT_NO_MENUBAR

#endif

#ifndef QT_NO_RUBBERBAND

#  define QT_NO_RUBBERBAND

#endif

#ifndef QT_NO_SLIDER

#  define QT_NO_SLIDER

#endif

#ifndef QT_NO_GRAPHICSVIEW

#  define QT_NO_GRAPHICSVIEW

#endif

#ifndef QT_NO_SPINWIDGET

#  define QT_NO_SPINWIDGET

#endif

#ifndef QT_NO_SPLASHSCREEN

#  define QT_NO_SPLASHSCREEN

#endif

#ifndef QT_NO_STACKEDWIDGET

#  define QT_NO_STACKEDWIDGET

#endif

#ifndef QT_NO_STATUSBAR

#  define QT_NO_STATUSBAR

#endif

#ifndef QT_NO_STATUSTIP

#  define QT_NO_STATUSTIP

#endif

#ifndef QT_NO_TOOLBUTTON

#  define QT_NO_TOOLBUTTON

#endif

#ifndef QT_NO_WHATSTHIS

#  define QT_NO_WHATSTHIS

#endif

#ifndef QT_NO_TOOLTIP

#  define QT_NO_TOOLTIP

#endif

#ifndef QT_NO_VALIDATOR

#  define QT_NO_VALIDATOR

#endif

然后执行以下命令进行编译:

# ./configure -release -shared -fast -no-largefile -no-exceptions -no-accessibility  -no-stl -no-sql-sqlite -no-qt3support -no-xmlpatterns  -no-multimedia  -no-audio-backend -no-phonon -no-phonon-backend -no-svg -no-webkit  -no-javascript-jit -no-script  -no-scripttools -no-declarative  -no-declarative-debug -no-mmx -no-3dnow -no-sse -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-gif -no-libtiff -qt-libjpeg -no-openssl -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis   -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-mips-g++ -embedded mips  -no-iconv -no-gtkstyle -no-nas-sound -no-opengl -no-openvg -no-sm  -no-xshape  -no-xvideo  -no-xsync -no-xinerama  -no-xcursor  -no-xfixes  -no-xrandr -no-xrender -no-mitshm    -no-xinput   -no-xkb -no-glib  -qt-freetype -depths 8,16,24,32  -qt-gfx-linuxfb   -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc   -no-gfx-qvfb   -no-glib -no-declarative-debug  -qconfig example

# make 

# make install

安装编译完成后再次查看库的大小:

# du -sh /usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib/*.so.4.7.1

3.1M /usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib/libQtCore.so.4.7.1

6.4M /usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib/libQtGui.so.4.7.1

512K /usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib/libQtNetwork.so.4.7.1

272K /usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib/libQtSql.so.4.7.1

168K /usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib/libQtTest.so.4.7.1

324K /usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib/libQtXml.so.4.7.1

可以看到裁剪是有效的,其中libQtGui裁剪了近半的空间。

5.QT程序移植及运行环境配置

下边将以QT自带example为例讲述移植过程:

在编译之前,需要先制定好编译的QT环境变量,为了方便使用,建议使用脚本进行配置,在程序源文件目录中新建一个qte4-path.sh的文件,内容如下:

File./qte4-path.sh

export QTDIR=/usr/local/Trolltech/QtEmbedded-4.7.1-mips/

export QTEDIR=$QTDIR

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export LD_LIBRARY_PATH=/TSLIB/lib:$LD_LIBRARY_PATH

export PATH=/home/cpu/gcc-3.4.6-2f/bin:$PATH

然后执行以下命令:

#chmod  a+x qte4-path.sh

#source qte4-path.sh 

#cd  examples/widgets/calculator

#$QTDIR/bin/qmake -project

#$QTDIR/bin/qmake

#make

编译成功后可在目录下找到生成的二进制可执行文件calculator,查看该二进制可执行文件相关链接库信息:

# mipsel-linux-readelf  -d  calculator

Dynamic section at offset 0x15c contains 33 entries:

  标记        类型                         名称/

 0x00000001 (NEEDED)                     共享库:[libQtGui.so.4]

 0x00000001 (NEEDED)                     共享库:[libQtNetwork.so.4]

 0x00000001 (NEEDED)                     共享库:[libQtCore.so.4]

 0x00000001 (NEEDED)                     共享库:[libpthread.so.0]

 0x00000001 (NEEDED)                     共享库:[libstdc++.so.6]

 0x00000001 (NEEDED)                     共享库:[libm.so.6]

 0x00000001 (NEEDED)                     共享库:[libgcc_s.so.1]

 0x00000001 (NEEDED)                     共享库:[libc.so.6]

 0x0000000f (RPATH)                      Library rpath:  [/usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib]

可以看到Library rpath即链接库目录为:

/usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib

还有根据之前安装交叉编译工具链所带的基本库目录为:

/home/cpu/gcc-3.4.6-2f/mipsel-linux/lib/

我们可以在这两个目录下将运行widgets所需要的链接库文件都拷贝出来:

eg.

#cp  //usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib/libQtGui.so.4  .

这些*.so文件即为在Loongson 1B开发板上运行QT程序calculator所需要的动态链接库文件。

接下来需要说明一下板上文件系统内QT环境参数设置问题:

上边可以看到QT Library rpath的路径参数为:

/usr/local/Trolltech/QtEmbedded-4.7.1-mips/lib

在开发板上,默认的QT路径即为:

/usr/local/Trolltech/QtEmbedded-4.7.1-mips/

故而我们只需要将运行QT程序需要的相关库文件及相关文件放置在此目录下,板上系统在运行QT程序时即会自动搜索此目录下的相应文件进行加载,该目录下的目录结构一般如下:

/usr/local/Trolltech/QtEmbedded-4.7.1-mips/-->

{

lib/ --> fonts

plugins  --> imageformats

translations

}

lib目录用于放置运行QT程序需要的动态库文件,lib目录内的fonts用于放置QT程序需要的字体文件;

plugins用于放置运行QT程序需要加载的插件,一般情况下显示图片需要用到imageformats插件;

translations用于放置QT程序语言国际化支持的翻译文件。

而构建自己的QT文件夹,相关文件需要按照以上QT文件目录结构进行放置。

同时为了TSLIB触摸屏支持,我们需要将之前编译完成的TSLIB文件夹拷贝到板上的文件系统,默认存放位置为编译QT时指定的TSLIB路径。

当然我们也可以通过配置环境变量参数来改变QT目录及TSLIB目录的路径,下边列出板上设置的环境参数设置:

File/etc/profile

...

#指定QT目录,可更改成自己的QT目录路径

export QTDIR=/usr/local/Trolltech/QtEmbedded-4.7.1-mips  

#指定中文编码格式,解决中文乱码问题,当然程序中也必须为UTF-8格式编码

export LC_ALL=zh_CN.UTF-8

export LANG_ALL=zh_CN.UTF-8

export LANG=zh_CN.UTF-8

#指定TSLIB目录,可更改成自己的TSLIB目录路径

export TSLIB_ROOT=/TSLIB

#指定相关TSLIB运行参数及设备类型

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_TSDEVICE=/dev/event0

export TSLIB_CALIBFILE=/etc/pointercal

export TSLIB_CONFFILE=/TSLIB/etc/ts.conf

export TSLIB_PLUGINDIR=/TSLIB/lib/ts

export TSLIB_TSEVENTTYPE=INPUT

#指定QT支持TSLIB触摸屏设备

export QWS_MOUSE_PROTO=Tslib:/dev/event0

#指定QT库及TSLIB库加载路径

export LD_LIBRARY_PATH=$QTDIR/lib:$TSLIB_ROOT/lib:/usr/local/lib:$LD_LIBRARY_PATH

#设置QT程序显示参数

export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0"

#指定QT程序加载字体路径

export QT_QWS_FONTDIR=$QTDIR/lib/fonts  

#指定QT程序加载插件路径

export QT_PLUGIN_PATH=$QTDIR/plugins/

...

进行以上配置之后,即可在板子上运行程序,第一次使用TSLIB触摸屏,需要对触摸屏进行校准:

#$ TSLIB_ROOT/bin/ts_calibrate

校准后在/etc目录下会生成一个名为pointercal的校准配置文件

#./calculator -qws

这里需要说明的是:qws的全称是Qt windows system,是QT自行开发的窗口系统,体系结构类似X Windows,是一个C/S结构,由QWS Server在物理设备上显示,由QWS Client实现界面,两者通过socket进行彼此的通讯,而这里后边加的运行参数-qws是指明程序是QWS Server

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值