一、下载准备
1.qt5.14.1源码和linux安装包下载:https://download.qt.io/ 通过命令解压到当前文件夹:
sudo tar xvf qt-everywhere-src-5.14.1.tar.xz
2.交叉编译工具链下载:https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/
下载完成之后,解压,压缩包里的 bin 目录下,就有我们需要的交叉编译器,直接使用即可。
交叉编译是编译技术发展过程中的一个重要分支。通俗的说,交叉编译就是在一个平台上生成另一个平台上的可执行代码。这里提到的平台有两方面的含义:处理器的体系结构和所运行的操作系统。
通常,程序是在一台计算机上编译,然后再分布到将要使用的其它计算机上。当主机系统(运行编译器的系统)和目标系统(产生的程序将在其上运行的系统)不兼容时,该过程就叫做交叉编译。嵌入式系统应用的日益广泛和需求推动了交叉编译技术的发展。嵌入式系统开发,一般都是基于X86的PC平台进行,如果开发非X86的嵌入式系统,由于嵌入式系统资源的匮乏,交叉编译几乎是唯一手段。嵌入式系统中的应用程序都是通过交叉编译得到的。
二、交叉编译环境配置
(1)交叉编译环境配置
添加环境变量:
sudo gedit /etc/profile
我的路径:
export PATH=$PATH:/home/wht/QtBuild/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin
更新环境变量
source /etc/profile
(2)Qt编译环境配置
进入Qt源码架构信息路径,修改交叉编译架构用到的信息:
gedit ./qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.config
修改路径;
#
# qmake configuration for building with aarch64-linux-gnu-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = /home/wht/QtBuild/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
QMAKE_CXX = /home/wht/QtBuild/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
QMAKE_LINK = /home/wht/QtBuild/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB = /home/wht/QtBuild/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
# modifications to linux.conf
QMAKE_AR = /home/wht/QtBuild/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY = /home/wht/QtBuild/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-objcopy
QMAKE_NM = /home/wht/QtBuild/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-nm -P
QMAKE_STRIP = /home/wht/QtBuild/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-strip
load(qt_config)
(3)配置编译选项
输入./configure -help 指令,查看可配置选项,由于配置选项太长,我另写了一个脚本来执行配置选项,名为autoconfigure.sh,配置主要指定编译输出路径和功能选择:
#!/bin/bash
./configure -prefix /home/wht/qt5.14.1-arm \
-opensource \
-confirm-license \
-release \
-strip \
-shared \
-xplatform linux-aarch64-gnu-g++ \
-optimized-qmake \
-c++std c++11 \
--rpath=no \
-pch \
-skip qt3d \
-skip qtactiveqt \
-skip qtandroidextras \
-skip qtcanvas3d \
-skip qtconnectivity \
-skip qtdatavis3d \
-skip qtdoc \
-skip qtgamepad \
-skip qtlocation \
-skip qtmacextras \
-skip qtnetworkauth \
-skip qtpurchasing \
-skip qtremoteobjects \
-skip qtscript \
-skip qtscxml \
-skip qtsensors \
-skip qtspeech \
-skip qtsvg \
-skip qttools \
-skip qttranslations \
-skip qtwayland \
-skip qtwebengine \
-skip qtwebview \
-skip qtwinextras \
-skip qtx11extras \
-skip qtxmlpatterns \
-make libs \
-make examples \
-nomake 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 \
-I/home/tslib/include \
-L/home/tslib/lib \
-recheck-all
给执行权限,执行脚本进行配置
chmod +x ./autoconfig.sh
./autoconfigure.sh
三、编译Qt库及移植
(1)编译
编译时间大概2-3小时
sudo make
sudo make install
(2)移植Qt到文件系统
将编译出的Qt库文件夹打包拷贝到根文件系统的路径下解压,并配置环境变量,配置如下:
export PATH PS1 OPIEDIR QPEDIR QTDIR EDITOR TERM
export TS_ROOT=/opt/tslib
export LD_LIBRARY_PATH=$TS_ROOT/lib:$LD_LIBRARY_PATH
export PATH=$TS_ROOT/bin:$PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=$TS_ROOT/etc/pointercal
export TSLIB_CONFFILE=$TS_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TS_ROOT/lib/ts
# qt
export QT_ROOT=/opt/qt5.14.1-arm
export LD_LIBRARY_PATH=$QT_ROOT/lib/:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0:inverty
export QT_QPA_FB_TSLIB=1
四、搭建 Qt Creator 交叉编译环境
安装完成后, 配置Qt Creator Kits。打开Qt,点击工具->选项
配置 qmake,qmake在上面编译Qt源码后生成的qt5.14.1-arm里面
配置 C++编译器,使用下载的交叉编译工具链
配置 Kits,选择刚才的Qt versions和C++编译器。
构建ARM平台上的Qt执行程序,就选上刚才新添加的Kit,然后点击构建,就会生成一个 build-test-ARM_Qt_5_12_9-Debug 的文件,里面就存放着Qt可执行程序,把这个可执行程序发送到ARM平台(开发板),然后直接运行就可以了。
五、获得Qt可执行文件的另一种方法
除了上面说的在Qt Creator 中构建出可以在ARM平台上运行的Qt程序之外,还有另一种方法也可以得到可以在ARM平台上运行的Qt程序。
进入项目的文件夹,直接运行qmake,生成 Makefile,再执行 make 开始编译。
cd test
/home/wht/home/qt5.14.1-arm/bin/qmake
make
查看ARM版本可执行程序的详细信息: