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

相关推荐
开源技术10 分钟前
如何将本地LLM模型与Ollama和Python集成
开发语言·python
Hello World . .15 分钟前
数据结构:队列
c语言·开发语言·数据结构·vim
clever10127 分钟前
在QtCreator 4.10.2中调试qt程序qDebug()输出中文为乱码问题的解决
开发语言·qt
测试开发Kevin1 小时前
小tip:换行符CRLF 和 LF 的区别以及二者在实际项目中的影响
java·开发语言·python
松☆1 小时前
Dart 核心语法精讲:从空安全到流程控制(3)
android·java·开发语言
编码者卢布2 小时前
【App Service】Java应用上传文件功能部署在App Service Windows上报错 413 Payload Too Large
java·开发语言·windows
kaikaile19952 小时前
结构风荷载理论与Matlab计算
开发语言·matlab
切糕师学AI2 小时前
ARM 汇编器中的伪指令(Assembler Directives)
开发语言·arm开发·c#
吕司2 小时前
Qt的信号与槽
开发语言·qt
bjxiaxueliang3 小时前
一文掌握C/C++命名规范:风格、规则与实践详解
c语言·开发语言·c++