虚拟机Ubuntu22.04交叉编译Qt5.15.2(ARM64)

在虚拟机中编译Qt5.15.2 源码,需要匹配的工具链,我用过多个工具链进行编译,发现最好的工具链是gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu

一、准备好qt5.15.2源码和工具链压缩包

1.qt源码下载地址:https://mirrors.tuna.tsinghua.edu.cn/qt/

2.工具链下载地址:https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/

二、解压压缩包,并开始编译

我是将两个压缩包放在单独的文件夹内: /home/prj/qtpack

1.直接将qt包解压到当前目录:

复制代码
tar -xf qt-everywhere-src-5.15.2.tar.xz

2.将工具链解压到/opt/文件夹下,这样方便后续使用工具链。

复制代码
sudo tar -xf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz -C /opt/

3.将解压的工具链添加到环境变量。(选择永久设置方法即可)

复制代码
# 临时添加到当前会话
export PATH=/opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin:$PATH

# 永久添加到 ~/.bashrc 或 ~/.profile
echo 'export PATH=/opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

4.验证环境变量是否设置成功。

复制代码
# 检查交叉编译器是否可用
aarch64-none-linux-gnu-gcc --version

查询后,出现如下即可

复制代码
Using built-in specs.
COLLECT_GCC=aarch64-none-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/../libexec/gcc/aarch64-none-linux-gnu/9.2.1/lto-wrapper
Target: aarch64-none-linux-gnu
Configured with: /tmp/dgboter/bbs/rhev-vm2--rhe6x86_64/buildbot/rhe6x86_64--aarch64-none-linux-gnu/build/src/gcc/configure --target=aarch64-none-linux-gnu --prefix= --with-sysroot=/aarch64-none-linux-gnu/libc --with-build-sysroot=/tmp/dgboter/bbs/rhev-vm2--rhe6x86_64/buildbot/rhe6x86_64--aarch64-none-linux-gnu/build/build-aarch64-none-linux-gnu/install//aarch64-none-linux-gnu/libc --with-bugurl=https://bugs.linaro.org/ --enable-gnu-indirect-function --enable-shared --disable-libssp --disable-libmudflap --enable-checking=release --enable-languages=c,c++,fortran --with-gmp=/tmp/dgboter/bbs/rhev-vm2--rhe6x86_64/buildbot/rhe6x86_64--aarch64-none-linux-gnu/build/build-aarch64-none-linux-gnu/host-tools --with-mpfr=/tmp/dgboter/bbs/rhev-vm2--rhe6x86_64/buildbot/rhe6x86_64--aarch64-none-linux-gnu/build/build-aarch64-none-linux-gnu/host-tools --with-mpc=/tmp/dgboter/bbs/rhev-vm2--rhe6x86_64/buildbot/rhe6x86_64--aarch64-none-linux-gnu/build/build-aarch64-none-linux-gnu/host-tools --with-isl=/tmp/dgboter/bbs/rhev-vm2--rhe6x86_64/buildbot/rhe6x86_64--aarch64-none-linux-gnu/build/build-aarch64-none-linux-gnu/host-tools --enable-fix-cortex-a53-843419 --with-pkgversion='GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10)'
Thread model: posix
gcc version 9.2.1 20191025 (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10)) 

三、开始编译qt源码

1.进入到qt源码,进入到下面路径(由于我是编译ARM64)

/Home/Prj/qtpack/qt-everywhrer-src-5.15.2/qtbase/mkspecs/linux-aarch64-gnu-g++

进入到linux-aarch64-gnu-g++,修改qmake.conf文件内容

修改内容如下

其中,

/opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/

就是设置的工具链环境变量的地址。修改完,保存即可。

复制代码
#
# 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                = /opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc
QMAKE_CXX               = /opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++
QMAKE_LINK              = /opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++
QMAKE_LINK_SHLIB        = /opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++

# modifications to linux.conf
QMAKE_AR                = /opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-ar cqs
QMAKE_OBJCOPY           = /opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-objcopy
QMAKE_NM                = /opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-nm -P
QMAKE_STRIP             = /opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-strip
load(qt_config)

2.修改qfloat16.h文件,添加头文件引用,如果不修改,编译的时候会出现报错。

添加 #include <limits>

qt-everywhere-src-5.15.2/qtbase/src/corelib/global/qfloat16.h

3.开始配置

回到qt-everywhrer-src-5.15.2文件件中,并创建新的文件夹,用于存放编译文件。我这里创建qt_build_arm64文件夹。

进入到qt_build_arm64文件夹,打开控制台,输入如下指令。输入完毕,回车等待编译完成即可

复制代码
../configure -release -opensource -confirm-license -xplatform linux-aarch64-gnu-g++ -prefix /opt/qt-5.15.2-arm64 -nomake examples -no-opengl -silent -qpa linuxfb  -skip qtlocation

4.qt源码编译

复制代码
编译源码
make -j$(nproc)

5.安装到指定目录

复制代码
sudo make install

6.验证安装

复制代码
# 检查安装目录
ls /opt/qt-5.15.2-arm64/

# 检查qmake是否可用
/opt/qt-5.15.2-arm64/bin/qmake -v

7.设置环境变量

复制代码
#将以下内容添加到 ~/.bashrc 或 ~/.profile:
export QT5_ARM64_PATH=/opt/qt-5.15.2-arm64
export PATH=$QT5_ARM64_PATH/bin:$PATH
export LD_LIBRARY_PATH=$QT5_ARM64_PATH/lib:$LD_LIBRARY_PATH
export QMAKE_PATH=$QT5_ARM64_PATH/bin/qmake

#然后使配置生效:
source ~/.bashrc

四、在Qt Creator中添加ARM64的Kits

1.打开Qt Creator,进入菜单,工具->外部->配置->Kits

2.添加"编译器"

点击右边的"添加"按钮,添加编译器

名称:aarch64-none-linux-gnu-gcc-9.2

C compiler path :/opt/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux

(通过浏览按钮,选择解压的工具链)

3.添加"Qt版本"

点击"添加",在弹出的对话框中选择编译出来的qmake路径

4.添加"构建套件Kit"

点击"添加",选择前面设置的Qt版本,编译器,应用即可。

相关推荐
LawrenceLan5 小时前
Flutter 零基础入门(十一):空安全(Null Safety)基础
开发语言·flutter·dart
txinyu的博客6 小时前
解析业务层的key冲突问题
开发语言·c++·分布式
码不停蹄Zzz6 小时前
C语言第1章
c语言·开发语言
行者966 小时前
Flutter跨平台开发在OpenHarmony上的评分组件实现与优化
开发语言·flutter·harmonyos·鸿蒙
阿蒙Amon7 小时前
C#每日面试题-Array和ArrayList的区别
java·开发语言·c#
SmartRadio7 小时前
ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-完整UART BLE服务功能后的完整`main.c`代码
c语言·开发语言·c++·esp32·ble
且去填词7 小时前
Go 语言的“反叛”——为什么少即是多?
开发语言·后端·面试·go
知乎的哥廷根数学学派7 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
yeziyfx8 小时前
kotlin中 ?:的用法
android·开发语言·kotlin
charlie1145141918 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式