【编译QT交叉编译链教程】

前言

由于做嵌入式开发,很多时候ARM板子没有QT环境,也没有提供对应的交叉编译链,需要自己将QT源码编译,网上也很多教程,这边以全志A33为例,写个制作QT交叉编译教程。

前期准备

1、首先这边默认你已经安装好Lunux环境,我是用的是虚拟机,安装的是Ubuntu20.4 LTS版本,在QT官网下载好linux版本的qt,qt的下载链接:https://download.qt.io/archive/qt/5.12/5.12.12/
这边下载的是:【编译QT交叉编译链教程】_第1张图片安装QT这边就省略了,基本就是一路点next,注册账号就行。

2、由于我们要做交叉编译链,所以这边还要下载QT的源码包,下载链接:https://download.qt.io/archive/qt/5.12/5.12.12/single/
【编译QT交叉编译链教程】_第2张图片3、准备安装arm-xxx-gcc交叉编译器(xxx表示你需要用到的交叉编译器),将编译器解压到ubuntu的"/opt/"文件夹下(编译器放在什么文件夹随意),例如我的解压到:在这里插入图片描述然后将编译链接配置到环境变量中,有几种方式,1、可以直接

// 对当前终端生效 
export PATH="export PATH=/opt/OpenWrt-Toolchain-sunxi_gcc-5.3.0_musl-1.1.16_eabi.Linux-x86_64/toolchain-arm_cortex-a8+vfpv3_gcc-5.3.0_musl-1.1.16_eabi/bin/:$PATH"

追加到环境变量中。
2、直接加到用户环境变量中 用vim 编辑 “~/.bashrc”,在最后追加上刚刚的路径:在这里插入图片描述3、最后验证环境变量是否正常:输入

// 
arm-openwrt-linux-gcc -v

可以正常出来版本信息【编译QT交叉编译链教程】_第3张图片
,说明环境变量配置成功。

配置QT编译信息

1、进入到QT源码包解压后的"/qt-everywhere-src-5.12.12/qtbase/mkspecs/"路径下,新建文件夹

// A code block
cd /home/jank/A33/qt-everywhere-src-5.12.12/qtbase/mkspecs/
sudo mkdir  linux-openwrt-g++

然后从同级文件夹里面复制,qmake.conf 和 qplatformdefs.h文件在这里插入图片描述然后修改qmake.conf编译配置文件,这里其实主要是指定你的开发板架构平台和编译工具链。将文件内容替换成以下:

#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

QT_QPA_DEFAULT_PLATFORM = linuxfb

QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a -lts		//指定开发板架构
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a -lts

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
QMAKE_CC                = arm-openwrt-linux-gcc					//指定编译工具
QMAKE_CXX               = arm-openwrt-linux-g++
QMAKE_LINK              = arm-openwrt-linux-g++
QMAKE_LINK_SHLIB        = arm-openwrt-linux-g++

# modifications to linux.conf
QMAKE_AR                = arm-openwrt-linux-ar cqs
QMAKE_OBJCOPY           = arm-openwrt-linux-objcopy
QMAKE_NM                = arm-openwrt-linux-nm -P
QMAKE_STRIP             = arm-openwrt-linux-strip
load(qt_config)

修改完成后,到QT源码解压目录下,新建一个编译配置脚本

cd ~/A33/qt-everywhere-src-5.12.12/
vim compile.sh 

然后将下面内容添加到脚本中

#!/bin/bash
./configure -v \
-prefix /home/jank/A33/a33_qt5_linux \		//编译后会保存到这个文件夹
-opensource \
-confirm-license \
-release \
-shared \
-strip \
-xplatform linux-openwrt-g++ \		//linux-openwrt-g++ 是刚刚创建的文件夹,qt会根据里面的工具链和架构编译qt
-c++std c++11 \
--rpath=no \
-pch \
-make libs \
-make examples \
-make tools -nomake tests \
-gui \
-widgets \
-dbus-runtime \
--glib=no \
--iconv=no \
--pcre=qt \
--zlib=qt \
-no-openssl \
--freetype=qt \
--harfbuzz=qt \
-no-opengl \
-linuxfb \
--xcb=no \
--libpng=qt \
--libjpeg=qt \
--sqlite=qt \
-plugin-sql-sqlite \
-tslib \					//触摸屏相关
-I/home/jank/A33/a33_qt5/include/ \			//引入头文件
-L/home/jank/A33/a33_qt5/lib/				//引入库文件


关于脚本内容的解释,可以查看 config里面的注释:也可以查看这篇博文:https://blog.csdn.net/p942005405/article/details/83652502
2、将脚本文件添加可执行权限

 chmod 777 compile.sh 

然后运行脚本

./compile.sh

如果没错,会出来让你执行make信息,
【编译QT交叉编译链教程】_第4张图片如果出现报错,一般都是环境配置问题,回去检查环境配置。

执行安装

1、刚刚如果运行脚本成功,就可以执行make,使用多线程运行,

make  -j 12

如果没错,会出来如下图片
【编译QT交叉编译链教程】_第5张图片

2、大概一小时后,就会编译完成在运行安装

make install

在QT配置已经编译好的交叉编译链

1、打开QT设置,配置qmake
【编译QT交叉编译链教程】_第6张图片然后配置 GCC和G++编译链位置
【编译QT交叉编译链教程】_第7张图片
最后配置kits
【编译QT交叉编译链教程】_第8张图片到这里所有配置都完成了,就可以编写ARM板子的程序了,

最后编写程序测试

1、在ARM板子运行QT程序之前,需要将刚刚在Ubutun编译的ARM版本的QT库拷贝到板子里面,也就是:"/home/jank/A33/a33_qt5_linux/lib"路径下的,然后在ARM中使用 export 的方式将所用到的QT库加入到环境变量中,不然会出现缺少xxx.dll的报错。

你可能感兴趣的:(QT交叉编译全教程,qt5,linux,arm开发)