虚拟机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版本,编译器,应用即可。

相关推荐
Boop_wu1 小时前
[Java 面试] 多线程1
java·开发语言
专注于大数据技术栈1 小时前
java学习--main方法
java·开发语言·学习
2501_941802482 小时前
C++高性能并发编程实战:从多线程管理到内存优化与任务调度全流程解析
java·开发语言·c++
lqj_本人2 小时前
鸿蒙Qt音频实战:解决QMediaPlayer的高延迟与杂音问题
qt·音视频·harmonyos
Creeper.exe2 小时前
【C语言】函数
c语言·开发语言
wjs20242 小时前
C++ 数据结构
开发语言
yangmf20402 小时前
APM(三):监控 Python 服务链
大数据·运维·开发语言·python·elk·elasticsearch·搜索引擎
Q***f6353 小时前
Java数据可视化应用
java·开发语言·信息可视化
SundayBear3 小时前
嵌入式操作系统进阶C语言
c语言·开发语言·嵌入式