交叉编译QT5.7.0源码生成qmake工具

参考博客:

https://blog.csdn.net/sinat_20006769/article/details/79081154

https://blog.csdn.net/u012175418/article/details/52704734


编译前准备:

1.交叉编译工具:arm-linux-gnueabihf-gcc (野火® i.MX6ULL Mini开发板提供的,可与其不同)

2.Qt源码版本是:qt-everywhere-opensource-src-4.8.7   http://mirrors.ustc.edu.cn/qtproject/archive/qt/5.7/5.7.0/submodules/

3.tslib源码版本是:tslib-1.4   https://github.com/libts/tslib/releases/tag/1.4

移植
我们需要从 Qt Downloads 下载 5.7 版本的源码:qt-everywhere-opensource-src-5.7.0.tar.gz ,为什么选择 5.7 版本的软件呢?因为 5.7 版本以后,将不再支持 Windows XP ,为了保持兼容性才选择这个版本。


一、arm交叉编译器的安装

将“arm-gcc.tar.gz”解压到Ubuntu 系统的文件夹“/usr/local/arm”中。 
然后修改环境变量,切换到home目录,然后输入命令“vim .bashrc”,打开设置环境变量的文件“.bashrc”,将环境变量修改为“export PATH=$PATH:/usr/local/arm/arm-gcc/bin” 
保存退出,然后更新一下环境变量,输入命令“source .bashrc”。

source .bashrc

接着测试一下,编译器路径设置的对不对。如下图,在Ubuntu 命令行中输入命令”arm”, 
然后按键盘”Tab”,出现编译器“arm-none-linux-gnueabi-gcc-4.8.2”,这就说明编译 
器路径设置正确。


二、交叉编译tslib1.4

对触摸屏信号的获取、校正、滤波处理,均采用开源的tslib,本文采用的tslib版本为最新的tslib1.4(可以从本文提供的链接中下载tslib1.4)。 
1.将下载好的tslib1.4拷贝到/home/lz/transplant目录下(可以根据自己的系统选择某一目录),然后执行解压缩命令

tar -vxf tslib-1.4.tar.gz

切换到tslib目录: cd tslib

安装交叉编译tslib必须的一些工具(可以先查看是否已安装,ubuntu16.04自带这些工具,可跳过)

我这里是ubuntu18.04

sudo apt-get install autoconf

sudo apt-get install automake

sudo apt-get install libtool

 2.利用脚本写编译过程 
在tslib文件夹下新建文件configTslib14.sh

vi configTslib14.sh

configTslib14.sh脚本文件内容如下: 

#!/bin/sh
make clean && make distclean
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
CC=/usr/local/arm/arm-gcc/bin/arm-linux-gnueabihf-gcc ./configure --host=arm-linux --prefix=/opt/tslib1.4 --cache-file=arm-linux.cache

 运行脚本文件

./configTslib14.sh

如果出现错误:configure.ac:172: error: possibly undefined macro: AC_MSG_ERROR 

解决方法:

sudo apt-get install pkg-config

然后编译

make

安装

sudo make install

执行结束后,我们查看一下是否安装成功,执行命令:

ls /opt/tslib1.4

如果出现bin,etc,include,lib这前4个目录,如下图所示,说明交叉编译并安装tslib成功。


 三、交叉编译QT5.7.0

1、首先将下载的qt-everywhere-opensource-src-5.7.0.tar.gz解压,然后进去文件夹下

tar -vzxf qt-everywhere-opensource-src-5.7.0.tar.gz
cd qt-everywhere-opensource-src-5.7.0

2、修改交叉编译架构用到的信息:

gedit qtbase/mkspecs/linux-arm-gnueabi-g++/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)

# modifications to g++.conf
QMAKE_CC                = /usr/local/arm/arm-gcc/bin/arm-linux-gnueabihf-gcc -lts
QMAKE_CXX               = /usr/local/arm/arm-gcc/bin/arm-linux-gnueabihf-g++ -lts
QMAKE_LINK              = /usr/local/arm/arm-gcc/bin/arm-linux-gnueabihf-g++ -lts
QMAKE_LINK_SHLIB        = /usr/local/arm/arm-gcc/bin/arm-linux-gnueabihf-g++ -lts

# modifications to linux.conf
QMAKE_AR                = /usr/local/arm/arm-gcc/bin/arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY           = /usr/local/arm/arm-gcc/bin/arm-linux-gnueabihf-objcopy
QMAKE_NM                = /usr/local/arm/arm-gcc/bin/arm-linux-gnueabihf-nm -P
QMAKE_STRIP             = /usr/local/arm/arm-gcc/bin/arm-linux-gnueabihf-strip
load(qt_config)

注意:这里最好指定交叉编译工具的绝对路径(参考别人的博客时告之,有多个编译工具时,最好指定绝对路径)

3、创建一个脚本文件(autoConfigure.sh),用于生成Makefile,执行命令

gedit autoConfigure.sh

autoConfigure.sh脚本内容:

#!/bin/sh
./configure \
-v \
-prefix /opt/qt-5.7.0 \
-release \
-opensource \
-no-accessibility \
-make libs \
-xplatform linux-arm-gnueabi-g++ \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-zlib \
-tslib \
-skip qtdeclarative \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-nis \
-no-cups \
-no-glib \
-no-pkg-config \
-no-separate-debug-info \
-I/opt/tslib1.4/include -L/opt/tslib1.4/lib

其中-prefix /opt/qt-5.7.0代表我们编译完QT5.4.1后要安装地址;-tslib代表QT对触摸板的支持,-I 和 -L后面分别为为第一步编译tslib的include和lib的安装目录。 

注意,在脚本中有一个很重要配置:-skip qtdeclarative \ ,如果不加上这一句,在make时出现错误:

Project MESSAGE: Hunspell not found! Spell correction will not be available.
Project ERROR: Unknown module(s) in QT: quick
Makefile:44: recipe for target 'sub-virtualkeyboard-make_first' failed
make[2]: *** [sub-virtualkeyboard-make_first] Error 3

或者

sh:1:python:not found
Project ERROR:Building QtQml requires Python.
Makefile:44: recipe for target 'module-qtdeclarative-install_subtargets' failed
make: *** [module-qtdeclarative-install_subtargets] Error 3

 参考网上帖子:How to install and build Qt5.7-everywhere for beaglebone black- OS debian?

然后执行:make -j4

然后执行:sudo make install

安装文件被安装到路径: /opt/qt-5.7.0/

ls /opt/qt-5.7.0/

如果出现以下文件夹,则制作成功


四、设置QT的交叉编译环境

我们这里就不安装qtcreator 

        直接使用  /opt/qt-5.7.0/bin/qmake  来编译windows下qtcreator写好的项目

1.打开设置环境变量的文件“.bashrc”,将 /opt/qt-5.7.0/bin/qmake 取别名为 qmake

alias qmake="/opt/qt-5.7.0/bin/qmake"

2.进去虚拟机的共享文件夹QT项目下(以test2UDP为例)

cd /mnt/hgfs/share/test2UDP

test2UDP文件内容,如下图:

交叉编译QT5.7.0源码生成qmake工具_第1张图片

3、执行qmake,生成Makefile

qmake

4、执行MMakefile

make

交叉编译QT5.7.0源码生成qmake工具_第2张图片

5、编译成功后生成,可执行文件 ARM架构的  test2UDP

交叉编译QT5.7.0源码生成qmake工具_第3张图片

 

你可能感兴趣的:(QT)