一、搭建环境
1、ubuntu16.04。
2、qt交叉编译工具库使用的是qt-everywhere-opensource-src-5.9.0.tar.xz,我有使用其他版本编译,但总是有各种问题终止了。
3、 qt-opensource-linux-x64-5.9.0.run下载 4、ARM开发板为RK3399。
二、配置交叉编译工具
我使用的是RK3399厂商出的源码包里包含了的编译工具,但此处我还是讲一下如何自己下载交叉编译工具包。若已经配置好交叉编译工具链,此处可跳过。
1、下载交叉编译工具
gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar,下载地址。
2、解压
将此文件复制到你想安装的目录下,此处是复制到/opt 下,然后解压。
sudo tar -vxf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar
3、 添加环境变量
cd /etc
//打开文件
sudo vim profile
//在文件末尾添加
export PATH="/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$PATH"
//输入命令,使其生效
souce /etc/profile
//验证是否成功
aarch64-linux-gnu-gcc -v
出现如下,表示安装成功了
三、交叉编译qt库
接下来就是重点了,讲解如何交叉编译qt库。
1、下载qt
qt-everywhere-opensource-src-5.9.0.tar.xz,下载地址。
2、解压
将下载的qt-everywhere-opensource-src-5.9.0.tar.xz压缩包复制到/opt下,然后解压。
sudo tar -xvf qt-everywhere-opensource-src-5.9.0.tar.xz
3、修改配置文件
//修改文件所有者和所属权限,此处doit修改为自己的用户名
sudo chown -R doit:doit qt-everywhere-opensource-src-5.9.0
cd /opt/qt-everywhere-opensource-src-5.9.0/qtbase/mkspecs/linux-aarch64-gnu-g++
//修改文件
vim qmake.conf
在此文件中修改两处,一处是添加如下内容,另一处是将编译工具修改为自己的路径。
在文件中添加如下内容:
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv8-a -lts
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv8-a -lts
4、创建auto.sh文件
cd /opt/qt-everywhere-src-5.9.0/
vim auto.sh
新建的auto.sh为交叉编译自动配置脚本,在其中添加一下内容:
#!/bin/sh
./configure \
-prefix /opt/qt5.9.0 \
-confirm-license \
-opensource \
-release \
-make libs \
-xplatform linux-aarch64-gnu-g++ \
-pch \
-qt-libjpeg \
-qt-libpng \
-qt-zlib \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-cups \
-no-glib \
-no-dbus \
-no-xcb \
-no-separate-debug-info
其中/opt/qt5.9.0为编译后的安装目录,-xplatform linux-aarch64-gnu-g++为交叉编译相关选择,还记得之前我们修改过/opt/qt-everywhere-opensource-src-5.9.0/qtbase/mkspecs/linux-aarch64-gnu-g++文件夹下的qmake.conf文件吧,前后是有对应的,-no-xcb要选择。
//添加可执行权限
chmod u+x auto.sh
//执行编译
./auto.sh
接着输入
//此处编译大概需要一个小时
//我在使用qt-everywhere-src-5.10.0.tar.xz版本时
//此过程会提示global/qrandom.cpp:52:26: fatal error: sys/random.h: 没有那个文件或目录
//没有解决掉,只好换了个qt工具库
sudo make -j4
//进行编译,编译完成后输入命令
sudo make install
安装完成后,我们在/opt/qt5.9.0 安装目录中有相应文件出现,表示编译成功。