Qt移植到ARM Linux教程

Qt 是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程。


2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP。


可以说,Qt 同 Linux 系统 X Window 上的 Motif、Openwin、GTK 等图形界面库,以及Windows 平台上的 MFC、OWL、VCL、ATL是同类型的东西。


Qt的移植包括步骤如下:


下载新版qt;
编译tslib;
编译qt;
配置编译后的qt,以便在主机上用qmake编译适用目标板的qt应用;
拷贝lib文件到目标板。
1 下载 tslib 和 Qt


Tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。在采用触摸屏的移动终端中,触摸屏性能的调试是个重要问题之一,因为电磁噪声的缘故,触摸屏容易存在点击不准确、有抖动等问题。


到 github 下载 tslib最新版,地址:https://github.com/kergoth/tslib,下载后文件名为:tslib-master.zip。
tslib


到 Qt 官网下载合适的 Qt 版本,地址:http://download.qt-project.org/archive/qt/。本教程以 4.8.5为例,下载的压缩包名称为: qt-everywhere-opensource-src-4.8.5.tar.gz。
 


2 环境准备


安装automake、libtool 和主机上的 Qt 工具:


$ sudo apt-get install automake autoconf libtool m4
$ sudo apt-get install libX11-dev libXext-dev libXtst-dev libXrender-dev 
(!!!!!这句不能运行不然重启后无法进入系统$ sudo apt-get install libqt4-core libqt4-dev libqt4-webkit qt4-demos!!!!!!)
如果还没有交叉编译器的路径添加到PATH,要先把该路径添加到PATH中,本例使用的交叉编译器的路径为 /usr/local/arm-2010q1/bin(一定要指定自己目标板的交叉编译器路径),则执行以下命令:


$ export PATH=$PATH:/usr/local/arm-2010q1/bin
 


3 编译tslib


(1)建立工作目录


$ cd ~
$ sudo mkdir /usr/local/tslib
$ sudo mkdir /usr/local/qt4.8.5-arm
$ mkdir qt
$ cd qt
(2)编译安装tslib


将下载的tslib源码复制到工作目录,并解压:


$ unzip tslib-master.zip
$ cd tslib-master
(3)编译


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


$ ./autogen.sh
$ ./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ --host=arm-none-linux-gnueabi  --prefix=/usr/local/tslib 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”,注意一定要顶格。


 


4 编译安装qt


(1)解压


$ cd ~/qt-arm
$ cp qt-everywhere-opensource-src-4.8.5.tar.bz2 ./
$ tar xjvf qt-everywhere-opensource-src-4.8.5.tar.bz2
$ 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 后,将arm-linux-全部替换 arm-none-linux-gnueabi-(注意:根据自己板子而定,并且一定要先将交叉编译器的路径加入PATH变量中),并加上-lts,然后保存退出,更改后如下:


# modifications to g++.conf
QMAKE_CC = arm-none-linux-gnueabi-gcc -lts
QMAKE_CXX = arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK = arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++ -lts
# modifications to linux.conf
QMAKE_AR = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy
QMAKE_STRIP = arm-none-linux-gnueabi-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/veryarm/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/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-gcc -lts
QMAKE_CXX = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-g++ -lts
QMAKE_LINK = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-g++ -lts
QMAKE_LINK_SHLIB = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-g++ -lts


# modifications to linux.conf
QMAKE_AR = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-objcopy
QMAKE_STRIP = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-strip
(4)编译安装


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


 


5 配置主机Qt


以便在主机上用 qmake 编译嵌入式qt应用


(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 文件中,这样系统登录时就自动设置好这些环境变量。


 


6 移植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了,新版本的qt就可以使用了!~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值