基于Windows10/11 搭建QT任意版本面向任意系统的交叉编译教程
##基于Windows10/11 搭建QT任意版本面向任意系统的教程编译
实例信息:
平台:`windows11`
目标平台:`aarch64`(发行版本:`Debian 11`)
perl工具: `strawberry perl`
交叉工具链:`arm-gnu-toolchain-15.2.rel1-mingw-w64-i686-aarch64-none-linux-gnu.zip`
QT源码版本:`qt-everywhere-src-5.15.2.zip`
python版本:`Python 3.7.4`
cmake版本: 未设置环境变量.
mingw-make工具:`mingw810_32`
ActivePerl 5.28 : strawberry perl 与 `ActiveState Perl 二选一即可。我选择的是strawberry perl.
最终效果
找到安装程序的目录,以及去bin目录或者其他目录下找到perl.exe文件,将改文件夹添加至系统环境变量即可

准备信息 Python 安装教程_下载地址
Python 3.12,因为Qt部分插件依赖Python库,因此需要安装Python库.没有版本要求.
最终效果
安装好Python之后,将python.exe所在目录,添加至系统环境变量即可.

准备信息 Cmake 安装教程
Cmake3.30.0,因为Qt部分插件依赖Cmake,因此需要安装Cmake.没有版本要求.
最终效果
安装好cmake之后,将cmake.exe所在目录,添加至系统环境变量即可.

toolchain,交叉编译工具链.
最终效果
下载对应版本之后,解压至即可.后续在qmake.conf中会用到这两个编译器.

如果你已经下载了QT,去QT官网找到对应版本的源码即可。我这里用到的是qt-everywhere-src-5.15.2.zip
(1),将源码目录下qtquick3d删除(编译可能报错)。
(2),修改源码目录下的\qtbase\mkspecs\linux-aarch64-gnu-g++\qmake.conf文件.
linux-aarch64-gnu-g++为交叉编译的目录根据实际情况选择不同的文件夹。这里使用的 aarch64-none-linux-gnu 可根据需要替换,设置为交叉编译链工具绝对路径即可,也可设置环境变量)
#
# 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 = aarch64-linux-gnu-gcc
# QMAKE_CXX = aarch64-linux-gnu-g++
# QMAKE_LINK = aarch64-linux-gnu-g++
# QMAKE_LINK_SHLIB = aarch64-linux-gnu-g++
# modifications to linux.conf
# QMAKE_AR = aarch64-linux-gnu-ar cqs
# QMAKE_OBJCOPY = aarch64-linux-gnu-objcopy
# QMAKE_NM = aarch64-linux-gnu-nm -P
# QMAKE_STRIP = aarch64-linux-gnu-strip
# modifications to g++.conf
QMAKE_CC = D:\SoftProgram\Qt5\arm-gnu-toolchain\bin\aarch64-none-linux-gnu-gcc
QMAKE_CXX = D:\SoftProgram\Qt5\arm-gnu-toolchain\bin\aarch64-none-linux-gnu-g++
QMAKE_LINK = D:\SoftProgram\Qt5\arm-gnu-toolchain\bin\aarch64-none-linux-gnu-g++
QMAKE_LINK_SHLIB = D:\SoftProgram\Qt5\arm-gnu-toolchain\bin\aarch64-none-linux-gnu-g++
# modifications to linux.conf
QMAKE_AR = D:\SoftProgram\Qt5\arm-gnu-toolchain\bin\aarch64-none-linux-gnu-ar cqs
QMAKE_OBJCOPY = D:\SoftProgram\Qt5\arm-gnu-toolchain\bin\aarch64-none-linux-gnu-objcopy
QMAKE_NM = D:\SoftProgram\Qt5\arm-gnu-toolchain\bin\aarch64-none-linux-gnu-nm -P
QMAKE_STRIP = D:\SoftProgram\Qt5\arm-gnu-toolchain\bin\aarch64-none-linux-gnu-strip
load(qt_config)
最终效果
将压缩包解压至出即可,后续编译时需要用到.

下载mingw64位工具,用于编译安装源码。并将mingw32-make所在目录,添加至系统环境变量.
最终效果

###开始编译
1.打开 qt-opensource-windows-x86-5.15.2 软件下的 Qt 5.15.2(MinGW 8.3.0 32-bit)(需要安装软件的时候选中安装该功能)
2.进入到源码目录,若是在其他盘,先换盘在进入。

3.配置编译选项,输入以下执行命令(具体为什么skip这些编译未测试,取消部分后要么配置失败要么编译失败)

configure.bat -release -opensource -prefix D:\SoftProgram\Qt5\arm-gnu-toolchain\build -nomake tests -nomake examples -no-opengl -skip qtvirtualkeyboard -skip qtwebengine -skip qt3d -skip qtquick3d -skip qttools -skip qtdeclarative -xplatform linux-aarch64-gnu-g++
4.上述配置成功后(无打印Error信息)输入 mingw32-make -j4 执行(其中-j后跟的是编译线程数)

5.编译成功后(无打印Error信息)执行安装命令 mingw32-make install(其中安装路径是上述配置中的 -prefix 后路径),安装完成后可能会存在报错,如果qmake.exe已经生成可以忽略不管。


6.安装后内容

新增kit套件
1.进入配置工具
选择:工具(Alt+T)->外部->配置.

2.新增GCC©编译器


新增GCC(C++)编译器

3.新增QT版本(qmake.exe)

4.新增Debuggers(调试器)

5.新增构建套件


项目测试
1.新增测试项目.

2.修改编译命令


3.构建测试

4.命令构建测试(豆包)


参考文档:
[1]:【Qt 学习之路】Qt 如何在 Windows上 交叉编译ARM 程序_qt交叉编译-CSDN博客
[2]:基于Windows10搭建QT的交叉编译_qt 如何在 windows上 交叉编译arm 程序-CSDN博客
[3]:Qt5离线安装包无法下载问题解决办法- CSDN博客
Qt在高版本linux编译时指定GLIBC版本以便在低版本linux运行时不跳出依赖错误啊? - 知乎
分发动态链接的二进制程序,还期待能跨越不同版本的动态链接库运行。这本质上不是一个好主意。或者说,这是在用错误的工具试图解决错误的问题。其它解决方案。
1.分发静态链接的二进制程序
2.分发源代码,期待最终用户自己编译链接
3.为不同的 Linux 发行版的不同版本分别制作二进制程序,并且分发这些不同的版本给最终用户
4.使用容器包装和分发二进制程序
详解 “lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34’ not found” 错误:原因、诊断与解决方案 — geek-blogs.com
version `GLIBC_2.34‘ not found简单有效解决方法_glibc 2.34 not found-CSDN博客
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)