做linux大半年了,接触QT也有一段时间了,从来没有成功的把QT移植到开发板上去,过完年闲得无聊,试了哈。今天能够成功的把QT的一个界面软件运行在开发板上了,写下此文,以防止如果有一天忘记了,能够通过查看此文档,复习哈。也方便各位学习指导。本人新手,如有不对的地方,还请见谅,和斧正。
平台:虚拟机:VMware Workstation
PC机操作系统:ubuntu12.04
编译环境:GCC,G++,arm-linux-gcc 4.4.1
qt-creator-linux-x86-opensource-2.7.0.bin
Qt libraries 4.8.4 for embedded Linux
tslib-1.4.tar.gz
大概理一下思路,对于PC机端:需要先编译tslib,主要用于生成触摸屏相关的库文件,方便QT调用,在编译Qt libraries 4.8.4 for embedded Linux,用于生产库QT库文件,对于Qt libraries 4.8.4 for embedded Linux的编译,有两种方式,一种是编译在PC机下使用,一种是在arm下使用,编译Qt libraries 4.8.4 for embedded Linux后会生成一个QT下的编译环境qmake。在成功编译完Qt libraries 4.8.4 for embedded Linux后,生产的QT库和qmake备用,arm编译下的QT库通过NFS方式拷贝到开发板上备用。接下来详细说明每一个步骤:
一、Tslib 移植
获取 tslib-1.4.tar.gz
1、安装必要的库和环境(PC机执行)
#sudo apt-get install autoconf
#sudo apt-get install libtool
#sudo apt-get install automake
2、解压
tar xvzf tslib-1.4.tar.gz
3、进入tslib目录
#cd tslib
4、设置环境变量和交差编译器路径
#export PATH=/usr/local/arm/4.4.1/bin:$PATH
#export TOOLCHAIN=/usr/local/arm/4.4.1
#export TB_CC_PREFIX=arm-linux-
#export PKG_CONFIG_PREFIX=$TOOLCHAIN/arm-linux
(这是我的交差编译器的安装位置,请根据实际情况指定交差编译器位置)
5、 执行脚本
#./autogen.sh
#echo "ac_cv_func_malloc_0_nunnull=yes" > arm-linux.cache
6、配置
#./configure –host=arm-linux /
--cache-file=arm-linux.cache /
--enable-inputapi=no /
PLUGIN_DIR=/usr/local/arm/stlib/plugins /
–prefix=/usr/local/arm/tslib/build /
--host=arm-linux /
--cache-file=arm-linux.cache 2>&1 | tee conf_log
以上的设置 ”/“为空格不用换行,使用的时候,不要复制使用,怕有不可识别字符导致配置错误
在--prefix指定的路径/usr/local/arm/tslib/build 会生成编译好的tslib文件
7、编译
#make 2>&1 | tee make_log
#make install
编译完成,可查看/usr/local/arm/tslib生成的tslib文件
二、Qt4.8.4 移植
1、复制qt-everywhere-opensource-src-4.8.4.tar.gz 库文件在ubuntu12.04下面的任何文件夹
2、安装需要的库
#Sudo apt-get install libxext-dev
3、解压qt-everywhere-opensource-src-4.8.4.tar.gz
#tar xzvf qt-everywhere-opensource-src-4.8.4.tar.gz
4、进入qt-everywhere-opensource-src-4.8.4
#cd qt-everywhere-opensource-src-4.8.4
5 、编译
a、编译到PC端使用的库,虽然我们在使用过程中不一定会使用,但是,我们可以编译出来方便调试
1)、配置
#.configure -prefix /usr/local/qt-x11/qtlib(指定编译完成的生成路径,路径请先建立)
2)、编译
#make (这个过程很久,大概在2个半小时后左右,需要等待,可以去玩一会儿)
#make install
完成编译以后,成功编译的话可以在生成路径/usr/local/qt-x11/qtlib 看到编译好的库文件,在qtlib/bin下面能够看到我们要使用的qmake工具
b、编译ARM版本下的库文件,如果进行了a步骤(编译到PC端使用的库)请执行清除配置命令
#make confclean
1)、修改文件 qmake.conf
#cd qt-everywhere-opensource-src-4.8.4/mkspecs/qws/linux-arm-g++
#sudo qmake.conf
打开这个配置文件,主要是设置 TSLIB_INCDIR 和 TSLIB_LIBDIR路径,路径设为你安装的tslib路径(编译tslib生成文件存放路径) ,下面是qmake.conf 文件内容,加入TSLIB_INCDIR 和 TSLIB_LIBDIR即可
2)、在qt-everywhere-opensource-src-4.8.4目录下新建一个脚本文件Build_qt.sh
#./configure -h
#sudo gedit Build_qt.sh
在脚本文件下输入如下内容:
#!/bin/bash
./configure\
-prefix /usr/local/qt-arm/qtlib \
-release\
-opensource \
-embedded arm \
-shared\
-no-fast \
-no-largefile\
-no-accessibility \
-stl \
-qt-sql-sqlite\
-qt-libjpeg\
-qt-libpng\
-no-qt3support \
-xplatform qws/linux-arm-g++ \
-little-endian -host-little-endian \
-no-mmx -no-3dnow -no-sse -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 \
-no-avx -no-neon \
-no-phonon -no-phonon-backend \
-no-svg\
-no-webkit\
-no-javascript-jit\
-no-script\
-no-openssl\
-no-nis\
-no-cups\
-nomake docs \
-qt-mouse-pc \
-qt-mouse-tslib
保存关闭,-prefix /usr/local/qt-arm/qtlib为生成的arm下执行的库文件的路径。
3)、修改脚本文件Build_qt.sh权限
#chmod 777 Build_qt.sh
4)、执行脚本文件
#./Build_qt.sh
该过程会比较久,可以去喝口水,玩一会儿在回来
5)、编译
#make
#make install
完成编译后,会在-prefix /usr/local/qt-arm的路径下看到编译好的库文件qtlib
在/usr/local/qt-arm/qtlib/bin下能够看到qmake文件。做完以上步骤,我们已经安装完了qt库文件和qmake。
三、安装qt-creator-linux-x86-opensource-2.7.0.bin,这个是在ubuntu下面最QT GUI的编程软件。安装完了qt-creator-linux-x86-opensource-2.7.0.bin,打开软件进行配置。
1 、打开QT
点击工具栏的tools-->options
然后选择Build&Run
先选择Compilers 用于指定编译器,点击Add-GCC
在Name里面输入:linux-arm-g++,点击Browes,指定arm-none-linux-gnueabi-g++的路径,这个是你安装的arm-linux交差编译器的/bin文件夹下面的一个文件:arm-none-linux-gnueabi-g++
然后选择Qt Versions指定qmake路径,点击Add,Versions name:Qt 4.8.4(qtarm),点击Browse,指定qmake的路径,这个路径是你编译好qt-everywhere-opensource-src-4.8.4的生成的库文件的路径,在/bin下面有qmake。
在点击Kits,照如下图设置。就完成了整个设置过程。
用qt-creator新建一个项目,点击File-->NEW File or Project...新建QT项目 ,然后选择Applications,新建项目。 export set LD_LIBRARY_PATH=/usr/local/qtlib/lib:$LD_LIBRARY_PATH export set QWS_MOUSE_PROTO="TSLIB:/dev/input/event0 " export set LD_LIBRARY_PATH=/usr/local/tslib/lib:$LD_LIBRARY_PATH export set TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf export set TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts export set TSLIB_CALIBFILE=/etc/pointercal export set TSLIB_FBDEVICE=/dev/fb0 export set TSLIB_TSDEVIEC=/dev/input/event0 设置这些环境变量,注意你的库存放的路劲。 |