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
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实战华为AC6508无线控制器+华为无线AP上线配置(AirEngine5762S-12+AirEngine5760-10)+无线WIFI配置

一、适用场景 1、适用于企业环境、校园环境、大户型家庭多层楼环境。 2、对于无线网络需要集中管理和监测的环境,无线wifi覆盖范围面积大,适用本实例。 3、当无线WIFI需要从一个区域到另一个区域无缝漫游时,确保应用不掉线,可使用…

MS41929双通道超低噪声 256 细分微步进低压电机驱动

MS41929 是一款双通道 5V 低压步进电机驱动芯片,通过 具有电流细分的电压驱动方式以及扭矩纹波修正技术,实现了 超低噪声微步进驱动。 芯片另外内置一个直流电机驱动器,上下开关的电阻之和 低至 1.1Ω 。 MS41929 内置了晶振放大模…

WPF实现类似网易云音乐的菜单切换

这里是借助三方UI框架实现了,感兴趣的小伙伴可以看一下。 深色模式:​ 浅色模式: ​这里主要使用了以下三个包: MahApps.Metro:UI库,提供菜单导航和其它控件​​​​​​​ 实现步骤:1、使用B…

【KEIL那些事 4】CMSIS缺失!!!!导致不能编译!!!!软件自带芯片下载缓慢!!!!!!快速下载芯片包!!!!!

安装了keli发现emmm,CMSIS缺失!!!!不能编译,,,自带下载芯片缓慢,,,官网下载emmm,竟然不带动的!!!&…

打开游戏提示丢失(或找不到)XINPUT1_3.DLL的多种解决办法

xinput1_3.dll是一个动态链接库(DLL)文件,它在Windows操作系统中扮演着重要的角色。该文件作为系统库文件,通常存放于C:\Windows\System32目录下(对于32位系统)或C:\Windows\SysWOW64目录下(对于…

移动管家摩托车一键启动系统功能特点

移动管家摩托车一键启动系统具备智能解锁、启动、熄火及防盗等多功能 智能解锁与启动 无需原车钥匙,携带感应器走近摩托车即可自动解锁,按下一键启动按钮即可点火启动摩托车。智能熄火与防盗 摩托车熄火后,系统自动进入防盗模式,…

探索网页组件化:原生JavaScript动态加载HTML与iframe的使用与比较

在网页设计中,将内容作为组件动态加载到页面上是一种提高用户体验和页面性能的有效手段。本文将详细介绍两种实现动态内容加载的方法:使用原生JavaScript动态加载HTML和使用iframe,并对比它们的使用方式和优缺点。 原生JavaScript动态加载HTM…

落地 ZeroETL 轻量化架构,ByteHouse 推出“四个一体化”策略

在数字化转型的浪潮中,数据仓库作为企业的核心数据资产,其重要性日益凸显。随着业务范围扩大,企业也会使用不同的数据仓库来管理、维护相关数据。研发人员需要花费大量时间和精力,从中导出数据,然后进行手动整理、转换…

【SpringBoot】16 文件上传(Thymeleaf + MySQL)

Gitee仓库 https://gitee.com/Lin_DH/system 介绍 文件上传是指将本地的图片、视频、音频等文件上传到服务器,供其他用户浏览下载的过程,文件上传在日常项目中用的非常广泛。 实现代码 第一步:在配置文件新增如下配置 application.yml s…

渗透实战 JS文件怎么利用

1.前言 关于JS在渗透测试中的关键作用,想必不用过多强调,在互联网上也有许多从JS中找到敏感信息从而拿下关键系统的案例。大部分师傅喜欢使用findsomething之类的浏览器插件,也有使用诸如Unexpected.information以及APIFinder之类的Burp插件…

单片机输出方波

从P1.0上输出一个方波,高电平5ms,低电平10ms. #include〈reg51。h〉 unsigned char flag; sbit outP1^0; void main() { flag0; TMOD0X02; TH06; TL06; TR01; EA1; ET0…

【直播伴侣】抖音开播设置

可以使用obs作为虚拟摄像头,把加工的画面喂给直播伴侣,然后用直播伴侣开播推流:看起来蓝光画质也是1080p 下最大的8Mbps推荐是6Mbps。抖音伴侣的开播设置 测试自己的上行带宽 30Mbps 不知道为啥别人都那么大: 看起来蓝光画质,码率也只有6Mbps

【鸡翅Club】项目启动

一、项目背景 这是一个 C端的社区项目,有博客、交流,面试学习,练题等模块。 项目的背景主要是我们想要通过面试题的分类,难度,打标,来评估员工的技术能力。同时在我们公司招聘季的时候,极大的…

电商大数据获取渠道分享--官方接口、爬虫、第三方如何选择?

在当今大数据驱动的商业环境中,电商企业越来越依赖数据分析来洞察市场、优化运营和提升竞争力。本文将分享几种常见的电商大数据获取渠道,帮助电商从业者更有效地收集和利用数据资源。 一、电商平台官方接口 各大电商平台如淘宝、京东、拼多多等&#…

【网络协议栈】Tcp协议(上)结构的解析 和 Tcp中的滑动窗口(32位确认序号、32位序号、4位首部长度、6位标记位、16为窗口大小、16位紧急指针)

绪论​ “没有那么多天赋异禀,优秀的人总是努力翻山越岭。”本章主要讲到了再五层网络协议从上到下的第二层传输层中使用非常广泛的Tcp协议他的协议字段结构,通过这些字段去认识其Tcp协议运行的原理底层逻辑和基础。后面将会再写一篇Tcp到底是通过什么调…

JAVA-石头迷阵小游戏

采用企业式项目结构,接下来我将分享全部代码和结构,希望大家点点关注! 这是我的结构。首先使用IDE创建一个Module,命名stone-maze,接着把自带src下的main方法删除,接着在src下创建包,包名为com.wmuj,接着创建APP类代码如下: package com.wmuj;public class App {publ…

进程间通信大总结Linux

目录 进程间通信介绍 进程间通信目的 进程间通信发展 进程间通信分类 管道 System V IPC POSIX IPC 管道 什么是管道 匿名管道 用fork来共享管道原理 站在文件描述符角度-深度理解管道 管道读写规则 管道特点 命名管道 创建一个命名管道 匿名管道与命名管道的区…

RabbitMQ系列学习笔记(八)--发布订阅模式

文章目录 一、发布订阅模式原理二、发布订阅模式实战1、消费者代码2、生产者代码3、查看运行结果 本文参考: 尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq RabbitMQ 详解 Centos7环境安装Erlang、RabbitMQ详细过程(配图) 一、发布订阅模式原理 在开发过程中&…

告别微信封号!学会这5招,让你的账号坚不可摧

在这个信息爆炸的时代,无论是工作沟通、社交互动还是获取信息,微信都扮演着极其重要的角色。但是,随着微信平台规则的日益严格,账号被封的风险也随之增加。今天,我们就来聊聊如何有效防止 微信被封,让你的账…

力扣——环形链表问题

判断链表是否有环以及入环的第一个节点 前言判断链表是否有环找到入环的第一个节点 前言 大家好,前段时间,熊二学习了关于环形链表相关的问题,以下是我的见解,希望能够帮助你们呀! 判断链表是否有环 给定一个链表&am…