利用QtCreator编译X86的Qt程序,直接点运行键就可编译运行程序,这是因为QtCreator帮我们配置了编译工具(qmake和gcc),但是要编译ARM版本的Qt程序,就需要移植ARM架构的QT库。
一、下载交叉编译工具链
下载arm -gcc的交叉编译工具链
二、下载触摸屏库tslib
1.切换到tslib目录:
安装交叉编译tslib必须的一些工具(可以先查看是否已安装,ubuntu16.04自带这些工具,可跳过)
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool
2.利用脚本写编译过程
在tslib文件夹下新建文件configTslib14.sh
vi configTslib14.sh
内容如下:
#!/bin/sh
make clean && make distclean
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
CC=/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/opt/tslib1.4 --cache-file=arm-l inux.cache
make && make install
3.运行configTslib14.sh
./configTslib14.sh
执行结束后,我们查看一下是否安装成功,执行命令:
ls /opt/tslib1.4
如果出现bin,etc,include,lib这4个目录,说明交叉编译并安装tslib成功。
三、移植QT到ARM
1、 要移植Qt必须要用到Qt的源码,在这里也是用Qt5的源码来移植。源码下载,选择文件qt-everywhere-opensource-src-xxx.tar.gz下载。
2、将下载好的qt-everywhere-opensource-src-xxx.tar.gz移动至/opt目录下
在/opt目录下解压:sudo tar -zxvf qt-everywhere-opensource-src-xxx.tar.gz
然后进入解压后目录:cd qt-everywhere-opensource-src-xxx
3、下面设置编译平台。编译器是通过xplatform参数指定的,xplatform后面跟的参数实际上就时qtbase/mkspec下的文件夹的名字,这里以linux-arm-gnueabi-g++为模板,拷贝这个文件夹,重命名为arm-linux,然后修改这个文件夹里的qmake.conf,修改后的内容如下:
# qmake configuration for building with arm-linux-gnueabi-g++
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QT_QPA_DEFAULT_PLATFORM = linux #eglfs
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a // 指定平台
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
/*
以下是指定交叉编译工具链的具体路径(你也可以设置成环境变量,直接写
arm-linux-gcc,这样就可以不用加上绝对路径,我这里因为linux下有多种版 本的工具链,所以加上绝对路径,具体写法要看你的linux情况)
*/
#modifications to g++.conf
QMAKE_CC = /usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib- 2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-gcc
QMAKE_CXX = /usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib- 2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-g++
QMAKE_LINK = /usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-g++
QMAKE_LINK_SHLIB = /usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-g++
# modifications to linux.conf
QMAKE_AR = /usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = /usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-objcopy
QMAKE_NM = /usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-nm -P
QMAKE_STRIP = /usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-strip
load(qt_config)
4、修改完成后返回顶层目录/opt/qt-everywhere-opensource-src-xxx。这时候要通过执行configure来生成Makefile文件了。我这里通过写一个脚本来自动生成Makefile文件,说白了就是把configure的参数写在脚本文件中。
vim autoConfigure.sh
#!/bin/sh
./configure \
-v \
-prefix /usr/local/Qt-5.5.0-arm \ //指定安装的位置
-release \
-opensource \
-no-accessibility \
-make libs \
-xplatform linux-arm-gnueabi-g++ \ // 指定平台 linux-arm-gnueabi-g++ 就是上面我们编辑 qmake.conf的那个文件夹
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-zlib \
-tslib \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-nis \
-no-cups \
-no-glib \
-no-pkg-config \
-no-separate-debug-info \
-I/usr/local/arm/tslib/include -L/usr/local/arm/tslib/lib //指定tslib库,这是我linux中t