windows 上面交叉编译 适合arm架构上的linux内核系统的qt 版本,源码编译

1. 在机器上确认系统信息

 cat /proc/cpuinfo
===========
model name      : ARMv7 Processor rev 5 (v7l)  === arm 32位
BogoMIPS        : 57.14
Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5

例如上面的armv7 就是32位的linux系统

处理器特性标识解释:

swp:Swap 指令,用于原子交换寄存器和内存值,通常用于同步操作。

half:处理器支持半字(16 位)加载和存储指令。

thumb:处理器支持 ARM 的 Thumb 指令集,Thumb 指令集比传统 ARM
指令集更为紧凑,通常用于优化代码密度(减少代码占用的存储空间)。

fastmult:处理器支持快速乘法指令。

vfp:Vector Floating Point,矢量浮点单元。处理器支持硬件浮点运算。

edsp:Enhanced DSP(数字信号处理)指令集扩展。用于加速数字信号处理操作。

neon:ARM NEON 技术,支持高级 SIMD(单指令多数据)指令集,常用于多媒体处理(如音频和视频处理)、信号处理等。

vfpv3:处理器支持 VFPv3(矢量浮点处理器版本 3),提供改进的浮点运算能力。

tls:Thread Local Storage,线程局部存储,用于支持多线程操作。

vfpv4:处理器支持 VFPv4,矢量浮点处理器版本 4,进一步增强了浮点运算的性能。

idiva:Integer Divide(带符号整数除法指令)。处理器支持整数除法指令,主要用于加速整数除法运算。

idivt:Unsigned Integer Divide(无符号整数除法指令)。支持无符号整数的除法运算。

vfpd32:支持 VFPv3 或 VFPv4 的扩展,能够处理 32 个双精度浮点寄存器(而不是 16 个)。

2.上linaro官网下载对应的一个交叉编译工具链下载地址

在这里插入图片描述
在这里插入图片描述

arm-linux-gnueabihf-gcc 32位 ARM 硬浮点 支持硬件浮点运算的 32 位 ARM 处理器。

arm-linux-gnueabi-gcc 32位 ARM 软浮点 不支持硬浮点运算的 32 位 ARM 处理器或使用软浮点运算的场景。

aarch64-linux-gnu-gcc 64位 ARM 支持 64 位 ARM 处理器,适用于如 Raspberry Pi 3、4等设备。

x86_64-linux-gnu-gcc 64位 x86 支持 64 位 x86 架构的 Linux 系统。

i686-linux-gnu-gcc 32位 x86 支持 32 位 x86 架构的 Linux 系统。

mips-linux-gnu-gcc MIPS 支持 MIPS 架构的处理器。

3.下载QT 源码下载地址


sinngle下面的才是源码路径

4.解包源码,开始编译

使用工具: 需要下载好qt creator , 在电脑启动菜单找到对应的编译工具链
在这里插入图片描述
1.创建路径,以及生成路径, 解压qt 源码,配置电脑的全局环境变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.打开 qt自带的编译工具窗口 ,切换到源码解压路径,开始编译
在这里插入图片描述
配置QT编译文件的命令:主要用来生成对应版本配置

configure -prefix “E:\qtbulit\bulit\arm_5.9.2” -release -nomake tests
-nomake examples -confirm-license -no-opengl -platform win32-g++ -xplatform arm-linux-gnueabihf-g++

输出路径: -prefix “E:\qtbulit\bulit\arm_5.9.2”
参数配置(类似禁止编译某个部分):-release -nomake tests
-nomake examples -confirm-license -no-opengl
编译平台: -platform win32-g++
目标平台: -xplatform arm-linux-gnueabihf-g++

配置成功截图配置成功

执行 编译操作 : mingw32-make -j12 (-j12 加快编译速度)

最后执行 mingw32-make install

把编译出来的库文件移动到 之前设定的目标路径下
在这里插入图片描述
编译源码结束。会生产对应的qmake程序 ,后面在qt creator配置kit套件的时候会用到

5.应用

在这里插入图片描述

6.移植程序到机器上运行

运行条件:
1.依赖的qt 库 ,以及添加库路径到环境变量路径里面去 export LD_LIBRARY_PATH=xxx/
2.平台插件移植,以及路径设置 export QT_QPA_PLATFORM_PLUGIN_PATH=xxxx/
3.下载字体库,设置对应路径 export QT_QPA_FONTDIR=/xxxxx/fonts

7.可能遇到的问题

ERROR: The OpenGL functionality tests failed!
You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2],
QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform.

方法一:直接禁用 opengl # -no-opengl 方法二:下载arm架构的库和头文件,加入到编译文件里面去
QMAKE_INCDIR_OPENGL = /path/to/opengl/include QMAKE_LIBDIR_OPENGL =
/path/to/opengl/lib QMAKE_LIBS_OPENGL = -lGL # 或者 -lGLESv2 如果你使用
OpenGL ES

==============================
Bootstrapping qmake ...
mingw32-make: Nothing to be done for 'first'.
ERROR: Invalid target platform 'arm-linux-gnueabihf-g++'.
===============================

手动创建交叉编译平台配置 如果 Qt 不包含 arm-linux-gnueabihf-g++
的预定义配置文件,你可以手动创建一个自定义的交叉编译配置。步骤如下:

进入 mkspecs 目录:到 Qt 源码目录中的 qtbase/mkspecs/ 路径。

复制一个类似的平台配置:

找到类似 linux-arm-gnueabi-g++ 的配置文件夹。 复制该文件夹并重命名为
arm-linux-gnueabihf-g++。 修改 qmake.conf:

打开复制的文件夹中的 qmake.conf 文件。 修改其中的编译器路径和编译器命令,使其匹配你的 ARMv7 工具链。 例如,修改为:

bash 复制代码
QMAKE_CC = arm-linux-gnueabihf-gcc
QMAKE_CXX = arm-linux-gnueabihf-g++
QMAKE_LINK = arm-linux-gnueabihf-g++
QMAKE_AR = arm-linux-gnueabihf-ar cqs
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/898924.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】线程互斥与同步,生产消费模型(超详解)

目录 线程互斥 进程线程间的互斥相关背景概念 数据不一致问题 锁 深度理解锁 原理角度理解: 实现角度理解: 线程同步 条件变量 测试代码 生产消费模型 生产消费模型概念 编写生产消费模型 BlockingQueue (1)创建生产…

双十一宠物空气净化器哪款吸毛好而且噪音低?希喂、IAM、有哈真实测评

家人们谁懂啊,家里怎么会有一只这么爱掉毛的小猫咪啊,看着香香软软的,谁知道掉起毛来六亲不认啊,搞得我这个老母亲筋疲力尽啊,每天只想着清理它掉下来的浮毛,主要是还特别难清理。 所以后面入手了能吸毛的…

OpenAI o1复现:自动构造prm训练数据-OmegaPRM

作者:cmathx 原文:https://zhuanlan.zhihu.com/p/1477078851 openai o1复现中,有个比较关键的问题,怎么样自动化构造prm模型的训练数据?本文主要从代码层面,来解析OmegaPRM原理。 论文 Improve Mathemat…

Discuz | 起尔开发 传奇开服表游戏公益服发布论坛网站插件

Discuz | 起尔开发 传奇开服表游戏公益服发布论坛网站插件 插件下载:源码 - 起尔开发的插件下载 演示地址:discuz.72jz.com 标黄和非标黄自动分开 在标黄时间内显示在上面置顶,标黄过期后自动显示在下面白色区域。 后台可以设置非标黄默认…

四、多线程带来的的⻛险-线程安全

4.1 观察线程不安全 运行以下代码&#xff1a; package demo02;public class Test {private static int count 0;public static void main(String[] args) throws Exception {Thread t1 new Thread(() -> {for (int i 0; i < 50_000; i) {count;}});Thread t2 new …

通过Docker Compose构建自己的Java项目

通过Docker Compose构建自己的Java项目 前置条件 安装了Docker,未安装的请移步:CentOS7 / CentOS8 安装 Docker-ce安装了Docker-Compose,未安装的请移步:在CentOS7、CentOS8系统下安装Docker Compose1. 配置阿里云镜像仓库 为了提高Docker镜像的下载速度,我们可以配置阿…

版本工具报错:Error Unity Version Control

NotConfiguredClientException: Unity VCS client is not correctly configured for the current user:Client config file.

python 爬虫 入门 三、登录以及代理。

目录 一、登录 &#xff08;一&#xff09;、登录4399 1.直接使用Cookie 2.使用账号密码进行登录 可选观看内容&#xff0c;使用python对密码进行加密&#xff08;无结果代码&#xff0c;只有过程分析&#xff09; 二、代理 免费代理 后续&#xff1a;协程&#xff0c;…

TitanIDE:解锁编程教学新范式

在高校软件工程类课程教育中&#xff0c;传统编程教学方式正面临着多重痛点&#xff1a; 环境配置繁琐&#xff1a;软件工程类课程往往需要学生自行配置复杂的开发环境。但是&#xff0c;学校硬件设备条件差异、软件兼容性问题等因素&#xff0c;导致学生学习效率低下&#xf…

热销王西圣H1头戴式耳机—全平台售罄断货:揭秘抢购潮究其原因?

西圣xisem作为国内平价享轻奢的领军品牌&#xff0c;就在今年它家的头戴式蓝牙耳机性价比标杆—西圣H1&#xff0c;凭借其发烧级的千元音质、降噪与满级的旗舰配置性能&#xff0c;不仅惊艳了整个耳机圈&#xff0c;还在仅仅的几个月内&#xff0c;西圣H1头戴式耳机已经火爆断货…

python 使用gradio启动程序报错

问题一&#xff1a;localhost is not accessible 解决办法&#xff1a; export no_proxy"localhost,127.0.0.1,::1"

C#学习笔记(三)

C#学习笔记&#xff08;三&#xff09; 第 二 章 命名空间和类、数据类型、变量和代码规范二、类的组成和使用分析1. 基本概念2. 类的内容组成3. 方法的初步理解 第 二 章 命名空间和类、数据类型、变量和代码规范 二、类的组成和使用分析 1. 基本概念 类是程序的基本单元&a…

PostgreSQL中触发器递归的处理 | 翻译

许多初学者在某个时候都会陷入触发器递归的陷阱。通常&#xff0c;解决方案是完全避免递归。但对于某些用例&#xff0c;您可能必须处理触发器递归。本文将告诉您有关该主题需要了解的内容。如果您曾经被错误消息“超出堆栈深度限制”所困扰&#xff0c;那么这里就是解决方案。…

Javascript算法——二分查找

1.数组 1.1二分查找 1.搜索索引 开闭matters&#xff01;&#xff01;&#xff01;[left,right]与[left,right) /*** param {number[]} nums* param {number} target* return {number}*/ var search function(nums, target) {let left0;let rightnums.length-1;//[left,rig…

大话网络协议:从OSI七层模型说开去

时至今日,互联网已经是大家日常生活中不可或缺的一部分,购物、点餐、刷剧、网课,已经融入了我们生活的方方面面。但网络具体是怎么工作的呢? 特别是我们具体从事软件研发、ICT行业的同学,理解和掌握这个我们产品运行的基础设施尤为必要。 本文,我们会力争用最简单易懂的…

秋季猫咪疯狂掉毛,宠物空气净化器有用吗?性价比高的该怎么选?

我家猫真的是换季就变掉毛怪&#xff0c;整只猫“虚胖”了一大圈不止&#xff0c;在阳光下可以看见非常多飘在空气中的浮毛。浮毛到处乱飞&#xff0c;沉积在黑色的衣服上&#xff0c;就形成白色的薄膜。自从养猫后&#xff0c;我再也没穿过深色的衣服。 现在每天都给它梳毛&am…

Linux文件的查找和打包以及压缩

文件的查找 文件查找的用处&#xff0c;在我们需要文件但却又不知道文件在哪里的时候 文件查找存在着三种类型的查找 1、which或whereis&#xff1a;查找命令的程序文件位置 2、locate&#xff1a;也是一种文件查找&#xff0c;但是基于数据库的查找 3、find&#xff1a;针…

Vue.js 学习总结(9)—— Vue 3 组件封装技巧

1、需求说明 需求背景&#xff1a;日常开发中&#xff0c;我们经常会使用一些UI组件库诸如and design vue、element plus等辅助开发&#xff0c;提升效率。有时我们需要进行个性化封装&#xff0c;以满足在项目中大量使用的需求。错误示范&#xff1a;基于a-modal封装一个自定…

【AIGC半月报】AIGC大模型启元:2024.10(下)

【AIGC半月报】AIGC大模型启元&#xff1a;2024.10&#xff08;下&#xff09; (1) Janus&#xff08;两面神&#xff09;&#xff08;DeepSeek 1.3B多模态大模型&#xff09;(2) Stable Diffusion 3.5&#xff08;StabilityAI文生图大模型&#xff09;(3) Mochi 1&#xff08;…

Python文件操作(读取、写入、修改和删除)

目录 一、文件的读取 二、文件的写入 三、文件的修改 四、文件的删除 Python是一种功能强大的编程语言&#xff0c;文件操作是编程中常见的需求。本文将详细介绍Python中的文件操作&#xff0c;包括文件的读取、写入、修改和删除&#xff0c;帮助读者掌握Python文件操作的基…