QT5交叉编译保姆级教程(arm64、mips64)

什么是交叉编译?

简单说,就是在当前系统平台上,开发编译运行于其它平台的程序。

比如本文硬件环境是x86平台,但是编译出来的程序是在arm64架构、mips64等架构上运行

本文使用的操作系统:统信UOS家庭版22.0

一、安装QT5(如果已安装跳过此步):

bash 复制代码
sudo apt update
sudo apt install qtbase5-dev -y
sudo apt install qtcreator -y

二、安装编译相关组件

bash 复制代码
sudo apt install build-essential libgl1-mesa-dev gperf libclang-dev -y

#安装python环境(如果你的程序中不需要调用python,可以不装)

bash 复制代码
sudo apt install python -y
sudo apt install python-dev -y
sudo apt install python-pip -y

#安装aarch64(arm64)编译链工具。国产CPU,如飞腾、华为麒麟等都是这个架构

bash 复制代码
sudo apt install g++-aarch64-linux-gnu -y
sudo apt install gcc-aarch64-linux-gnu -y

#安装mips64el编译链工具。龙芯3A3000、3A4000等是此架构。龙芯最新的LoongArch架构似乎还没有编译链工具

bash 复制代码
sudo apt install gcc-mips64el-linux-gnuabi64 -y
sudo apt install g++-mips64el-linux-gnuabi64 -y

三、下载QT5源码

QT官方下载地址:Index of /archive/qthttps://download.qt.io/archive/qt

根据自身需求选择一个版本下载。源码版本不需要和当前安装的一致,但最好不要低于当前安装的版本。QT6和QT5差别太大,不要选择。

这里我随手选了一个5.12.2的版本,可以直接在网页上下载、用下载工具下载、还可以使用命令下载:

bash 复制代码
#下载源码:
wget https://download.qt.io/archive/qt/5.12/5.12.2/single/qt-everywhere-src-5.12.2.tar.xz
#下载好后,解压源码:
tar -xvf qt-everywhere-src-5.12.2.tar.xz​

四、配置和编译源码

  1. 配置编译QT5的aarch64架构源码

进入刚才解压好的源码目录中,打开终端输入:

bash 复制代码
#配置编译参数
./configure -release -opensource -confirm-license -xplatform linux-aarch64-gnu-g++ -prefix /usr/local/qt5.12.2arm -nomake examples -no-opengl -silent -qpa linuxfb

如图:

其中:/usr/local/qt5.12.2arm 是编译后的安装目录,可自行修改

执行成功的话,如图:

编译:

bash 复制代码
make -j 12

-j 12参数表示使用12个线程进行编译,根据电脑的CPU线程数进行设置即可。

编译过程较长,如果编译过程中需要进行其它操作,适当减少线程数,以免操作太卡。

编译成功后,如图:

将编译好的文件安装到指定位置(安装位置在前面配置参数时已设置):

bash 复制代码
sudo make install

2.配置编译QT5的mips64架构源码

先将前面解压的qt-everywhere-src-5.12.2文件夹改名或者删除,然后重启一下电脑!

为什么要重启?因为我在编译完aarch64之后,接着编译mips64时编译出错,重启之后才正常。

为了避免不必要的错误,因此建议先重启一下。

使用命令重新解压源码:

bash 复制代码
tar -xvf qt-everywhere-src-5.12.2.tar.xz

QT源码里并没有mips64的编译项,因此这里需要手动创建。

进入刚才解压的源码目录,再进入其下级目录:qtbase/mkspecs 如图:

找到linux-aarch64-gnu-g++文件夹,将其复制一份。如图:

将其改名为:linux-mips64el-g++ 然后双击进入,里面有两个文件:qmake.conf、qplatformdefs.h

打开qmake.conf文件,打开后如图:

将aarch64全部替换为mips64el、gnu替换成gnuabi64,替换后如图:

修改完成,保存关闭文件即可。

回到源码根目录,在终端中执行参数配置:

bash 复制代码
./configure -release -opensource -confirm-license -xplatform linux-mips64el-g++ -prefix /usr/local/qt5.12.2mips64 -nomake examples -no-opengl -silent -qpa linuxfb

如图:

执行成功如图:

编译安装和aarch64是一样的:

bash 复制代码
make -j12  #编译源码。注意根据自已CPU的线程数修改12这个数
sudo make install  #安装编译好的源码

五、配置QT

打开Qt Creator,选择 工具->选项->Kits->Qt Versions 如图:

点击右侧的"添加..."按钮,在弹出的窗口中选择前面编译安装好的QT目录下的qmake,如图:

添加好后,点击右下角的"Apply"按钮。然后点击"构建套件(Kit)"选项卡:

点击右侧"添加"按钮,配置如图:

其中,名称可自行修改;

编译器可以选择gcc,只是我比较喜欢Clang,所以这里选的Clang;

注意:Qt mkspec 一定要填

至于红色的感叹号,这个不用在意,不影响编译。

mips64的配置也差不多:

六、验证测试

现在,创建一个工程来验证一下交叉编译是否正常。

先测试aarch64架构:

需要注意的是,异架构的程序是不能直接运行的。所以我们不运行它,直接点击左下方的"锤子"或者按Ctrl+B来构建。

编译没有出错。使用file命令,看一下编译后的文件:

如图所示,编译出来的程序确实是ARM aarch64 架构!

再看一下MIPS64的编译结果:

OK,搞定收工..

关于龙芯最新的"龙"(LoongArch)架构,似乎还没有编译链工具,因此还没法交叉编译。。

相关推荐
小小小~1 小时前
qt5将程序打包并使用
开发语言·qt
很楠不爱2 小时前
Qt——窗口
开发语言·qt
Mr.Q11 小时前
Qt多边形填充/不填充绘制
qt
可峰科技12 小时前
斗破QT编程入门系列之二:认识Qt:编写一个HelloWorld程序(四星斗师)
开发语言·qt
7年老菜鸡14 小时前
策略模式(C++)三分钟读懂
c++·qt·策略模式
huanggang98217 小时前
在Ubuntu22.04上使用Qt Creator开发ROS2项目
qt·ros2
老秦包你会18 小时前
Qt第三课 ----------容器类控件
开发语言·qt
spygg19 小时前
Qt低版本多网卡组播bug
qt·组播·多网卡组播·qt5.7.0
码农客栈19 小时前
qt QWebSocketServer详解
qt
plmm烟酒僧21 小时前
Windows下QT调用MinGW编译的OpenCV
开发语言·windows·qt·opencv