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

相关推荐
肖爱Kun30 分钟前
STL标准模块库操作
开发语言·音视频
Song_da_da_33 分钟前
C# 接口(Interface)深度解析:规范、解耦与灵活扩展
开发语言·c#
政沅同学1 小时前
基于 C# WPF + HALCON 的工业视觉算法工具框架(开源)
开发语言·c#·wpf
影寂ldy1 小时前
C#WinForm 窗体基础(入口、部分类、属性、生命周期事件)
开发语言·c#
2301_781833521 小时前
Python 正则表达式入门教程
开发语言·python·正则表达式
gihigo19981 小时前
基于蒙特卡洛的异常值剔除(RANSAC + MC置信区间)—MATLAB实现
开发语言·算法·matlab
Ting.~1 小时前
在java中接入百度地图
java·开发语言·dubbo
小短腿的代码世界1 小时前
Qt对象树析构链与智能指针协同:零泄漏内存管理架构
开发语言·qt·架构
zhaqonianzhu1 小时前
LOL切回桌面问题,采用监控抓出元凶方式
开发语言
Aurorar0rua1 小时前
CS50 x 2024 Notes Arrays - 04
c语言·开发语言·学习方法