当前位置: 首页 > news >正文

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

什么是交叉编译?

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

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

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

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

sudo apt update
sudo apt install qtbase5-dev -y
sudo apt install qtcreator -y

二、安装编译相关组件

sudo apt install build-essential libgl1-mesa-dev gperf libclang-dev -y

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

sudo apt install python -y
sudo apt install python-dev -y
sudo apt install python-pip -y

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

sudo apt install g++-aarch64-linux-gnu -y
sudo apt install gcc-aarch64-linux-gnu -y

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

sudo apt install gcc-mips64el-linux-gnuabi64 -y
sudo apt install g++-mips64el-linux-gnuabi64 -y

三、下载QT5源码

QT官方下载地址:Index of /archive/qticon-default.png?t=N7T8https://download.qt.io/archive/qt

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

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

#下载源码:
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架构源码

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

#配置编译参数
./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 是编译后的安装目录,可自行修改

执行成功的话,如图:

编译:

make -j 12

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

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

编译成功后,如图:

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

sudo make install

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

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

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

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

使用命令重新解压源码:

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,替换后如图:

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

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

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

如图:

 执行成功如图:

编译安装和aarch64是一样的:

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)架构,似乎还没有编译链工具,因此还没法交叉编译。。

相关文章:

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

什么是交叉编译? 简单说,就是在当前系统平台上,开发编译运行于其它平台的程序。 比如本文硬件环境是x86平台,但是编译出来的程序是在arm64架构、mips64等架构上运行 本文使用的操作系统:统信UOS家庭版22.0 一、安装…...

python计算图片的RGB值,可以作为颜色的判断条件

python计算图片的RGB值,可以作为颜色的判断条件 import colorsys import PIL.Image as Imagedef get_dominant_color(image):max_score 0.0001dominant_color Nonefor count,(r,g,b) in image.getcolors(image.size[0]*image.size[1]):# 转为HSV标准saturation c…...

oracle 日期

日期加减 Oracle中日期进行加减可以使用多种方式,以下介绍三种 一种是针对天的操作,适用于对日,时,分,秒的操作, 一种是对月的操作,适用于月,年的操作, 一种是使用INTER…...

JVM堆内存解析

一、JVM堆内存介绍 Java大多数对象都是存放在堆中,堆内存是完全自动化管理,根据垃圾回收机制不同,Java堆有不同的结构,下面是我们一台生产环境服务器JVM堆内存空间分配情况,JVM只设置了-Xms2048M -Xmx2048M。 1、JVM堆…...

C#Onnx模型信息查看工具

效果 Netron效果 项目 代码 using Microsoft.ML.OnnxRuntime; using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms;namespace Onnx_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string…...

RK3588 ubuntu系统安装opencv

废话不多说直接上步骤: 先切换至root用户 sudo su 输入密码先更新一下本地软件 apt update apt upgrade 安装相关环境 apt install build-essential cmake git pkg-config libgtk-3-dev \ libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-…...

常用的vue UI组件库

背景:Vue.js 是一个渐进式 javascript 框架,用于构建 UIS(用户界面)和 SPA(单页应用程序)。UI 组件库的出现提高了我们的开发效率,增强了应用的整体外观、感觉、交互性和可访问性,下…...

防范欺诈GPT

去年,ChatGPT的发布让全世界都感到惊讶和震惊。 突然间出现了一个平台,它比之前的任何其他技术都更深入地了解互联网。人工智能可以被训练成像阿姆一样说唱,以世界著名诗人的风格写作,并精确地翻译内容,以至于它似乎能…...

【Java】多线程案例(单例模式,阻塞队列,定时器,线程池)

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 实现安全版本的单例模式饿汉模式类和对象的概念类对象类的静态成员与实例成员 懒汉模式如何保证…...

STM32:使用蓝牙模块

一、蓝牙概要 蓝牙是一种常见的无线通信协议,通常用于短距离通信。蓝牙分为经典蓝牙和低功耗蓝牙(BLE)。经典蓝牙通常用于需要持续传输数据的设备,比如蓝牙耳机等。低功耗蓝牙通常用于只需要间歇性传输数据的设备,比如运动手环。 蓝牙…...

Blazor 虚拟滚动/瀑布流加载Table数据

page "/virtualScrolling" using BlazorApp.Data<h3>Table 虚拟滚动行</h3> <h4>Table 组件显示大数据时通常采用分页加载数据&#xff0c;还有一种虚拟行的技术类似手机滚动到底部时后台自动加载数据</h4><p>快速滚动时显示行占位&am…...

数字化浪潮下,AI数字人融入多元化应用场景

随着AI数字人技术的发展&#xff0c;各个行业都在不断挖掘数字人更多的潜力&#xff0c;VR全景中的AI数字人功能逐渐成为了一种新颖的用户交互方式。AI数字人将企业的文化、品牌价值、商业服务等充分结合为一体&#xff0c;为企业提供了全新的机会&#xff0c;从客户互动到营销…...

JVM虚拟机:JVM的垃圾回收清除算法(GC)有哪些

垃圾回收清除算法 引用计数法 标记清除 拷贝算法 标记压缩 引用计数法 有一个引用指向对象,那么引用计数就加1,少一个引用指向,那么引用计数就减1,这种方法了解一下就好,JVM机会不会使用这种方法,因为它在每次对象赋值的时候都要维护引用计数器,且计数器本身也有一定的…...

我应该删除低质量页面以提高Google排名吗?

为什么考虑删除低质量页面&#xff1f; 上个月&#xff0c;根据Google的搜索团队John Mueller和Gary Illyes在 “Search Off the Record”播客中的讨论&#xff0c;质量是影响搜索的几乎每一个方面的关键因素。 虽然高质量的内容不能保证高排名&#xff0c;但它可以影响Googl…...

【实战Flask API项目指南】之六 数据库集成 SQLAlchemy

实战Flask API项目指南之 数据库集成 本系列文章将带你深入探索实战Flask API项目指南&#xff0c;通过跟随小菜的学习之旅&#xff0c;你将逐步掌握 Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧&#xff01; 前言 在上一篇文章中&#xff0c;我们实现了…...

MFC网络通信-Udp服务端

目录 1、UI的布局 2、代码的实现&#xff1a; &#xff08;1&#xff09;、自定义的子类CServerSocket &#xff08;2&#xff09;、重写OnReceive事件 &#xff08;3&#xff09;、在CUdpServerDlg类中处理 &#xff08;4&#xff09;、在OnInitDialog函数中 &#xff0…...

最简单且有效的msvcp140.dll丢失的解决方法,有效的解决msvcp140.dll丢失

在我们使用电脑的过程中&#xff0c;有时会遇到一些令人困扰的问题&#xff0c;如msvcp140.dll文件丢失。对于许多不熟悉这方面技术的小伙伴来说&#xff0c;遇到msvcp140.dll丢失的问题可能会觉得棘手。其实这是一个很常见的问题&#xff0c;并且解决起来并不复杂。接下来将给…...

HBase理论与实践-基操与实践

基操 启动&#xff1a; ./bin/start-hbase.sh 连接 ./bin/hbase shell help命令 输入 help 然后 <RETURN> 可以看到一列shell命令。这里的帮助很详细&#xff0c;要注意的是表名&#xff0c;行和列需要加引号。 建表&#xff0c;查看表&#xff0c;插入数据&#…...

内存管理设计精要

系统设计精要是一系列深入研究系统设计方法的系列文章&#xff0c;文中不仅会分析系统设计的理论&#xff0c;还会分析多个实际场景下的具体实现。这是一个季更或者半年更的系列&#xff0c;如果你有想要了解的问题&#xff0c;可以在文章下面留言。 持久存储的磁盘在今天已经不…...

Java——StringBuffer与StringBuilder的区别

Java——StringBuffer与StringBuilder的区别 StringBuffer和StringBuilder是Java中用于处理字符串的两个类&#xff0c;它们之间的主要区别在于线程安全性和性能方面。 1. 线程安全性&#xff1a; StringBuffer&#xff1a;StringBuffer 是线程安全的&#xff0c;所有的公共方…...

OpenClaw+Qwen3-14b_int4_awq:3种降低token消耗的实战技巧

OpenClawQwen3-14b_int4_awq&#xff1a;3种降低token消耗的实战技巧 1. 为什么我们需要关注token消耗 第一次看到OpenClaw的token账单时&#xff0c;我差点从椅子上跳起来。一个简单的文件整理任务竟然消耗了接近5000个token&#xff0c;这还只是测试环境下的单次运行。当我…...

Open Event Server数据导入导出完全指南:支持JSON、XML、iCal格式的终极教程

Open Event Server数据导入导出完全指南&#xff1a;支持JSON、XML、iCal格式的终极教程 【免费下载链接】open-event-server The Open Event Organizer Server to Manage Events https://test-api.eventyay.com 项目地址: https://gitcode.com/gh_mirrors/op/open-event-ser…...

NASM调试指南:如何高效定位和修复汇编错误

NASM调试指南&#xff1a;如何高效定位和修复汇编错误 【免费下载链接】nasm A cross-platform x86 assembler with an Intel-like syntax 项目地址: https://gitcode.com/gh_mirrors/na/nasm NASM&#xff08;Netwide Assembler&#xff09;作为一款跨平台的x86汇编器&…...

公司SEO推广有哪些常见的误区需要避免

公司SEO推广有哪些常见的误区需要避免 在数字化营销的时代&#xff0c;公司SEO推广已经成为提升网站流量和品牌知名度的重要手段。在实际操作中&#xff0c;许多企业在SEO推广过程中常常犯下一些常见的误区&#xff0c;这些误区不仅影响了SEO的效果&#xff0c;还可能导致资源…...

Gitee与奇安信代码卫士的Java安全扫描实战指南

1. 为什么Java项目需要安全扫描&#xff1f; 最近几年&#xff0c;随着数字化转型加速&#xff0c;Java应用的安全问题越来越受到重视。我见过太多因为代码漏洞导致的数据泄露事件&#xff0c;很多都是因为开发过程中忽视了基础的安全检查。就拿去年某知名电商平台的用户信息泄…...

python建筑工程项目管理系统设计与实现

目录同行可拿货,招校园代理 ,本人源头供货商功能模块分析资源与成本管理进度与质量管理技术实现要点扩展功能建议项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块分析 项目管理…...

气电版通用自动分选机:圆柱电芯测试分选的精准之选

在新能源产业蓬勃发展的当下&#xff0c;圆柱电芯作为重要的储能元件&#xff0c;其生产过程中的质量把控至关重要。内阻和电压作为衡量电芯性能的关键指标&#xff0c;直接关系到电芯的使用寿命、充放电效率以及安全性。气电版通用自动分选机凭借其卓越的性能和精准的分选能力…...

vue3 diff算法中的-双端 Diff + 最长递增子序列 讲解

一句话总结 Vue3 Diff 双端比较&#xff08;快速复用&#xff09; 最长递增子序列&#xff08;最小移动 DOM&#xff09; 目的&#xff1a;在乱序节点中&#xff0c;只移动最少 DOM&#xff0c;实现最高效更新。1. 先搞懂&#xff1a;Vue3 对比 Vue2 差在哪&#xff1f; Vue2…...

【Python原生AOT编译终极指南】:2026年CPython 3.15+官方AOT源码级拆解与生产落地避坑清单

第一章&#xff1a;Python原生AOT编译的演进脉络与3.15官方定位Python长期以来以解释执行和字节码&#xff08;.pyc&#xff09;为默认运行范式&#xff0c;AOT&#xff08;Ahead-of-Time&#xff09;编译长期处于社区实验阶段。从Nuitka、Cython到PyO3/Rust绑定&#xff0c;再…...

合肥艺星12周年超级盛典 以“独1无2”之名,立品质医美新坐标

2026年4月1日,合肥艺星12周年超级盛典正式启幕。十二年,不只是时间的沉淀,更是品牌在品质、技术、服务、标准、态度、团队、城市责任与星品矩阵八大维度上,构建完整“坐标系”的高光时刻。合肥艺星以“独1无2”之姿,向安徽乃至全国医美行业定义出一份关于“独一”的答卷。独1无…...