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

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.kler.cn/news/367046.html

相关文章:

  • 系统聚类比较——最短距离法、最长距离法、重心法和类平均法
  • Docker:安装 Syslog-ng 的技术指南
  • 智慧停车场导航系统架构及反向寻车系统解决方案
  • 使用 docker 的方式部署 NFS server 提供文件共享能力
  • linux驱动—注册总线分析
  • O2OA如何实现文件跨服务器的备份
  • MYSQL-查看创建的用户语法(十二)
  • C++音视频02:环境搭建
  • 【rust实战】rust博客系统2_使用wrap启动rust项目服务
  • 基于DDPG算法的股票量化交易
  • 浮动+flex布局
  • Django项目实战-图书管理系统之项目搭建
  • c# windows 动态生成CheckBox控件
  • 前端优化:从Vue/React/Svelte的数组更新->渲染策略剖析数组大列表数据展示优化策略
  • Vue3 + TypeScript 实现 iframe 嵌入与通信的完整指南以及全屏弹窗方案
  • 最新ubuntu22.04 下列软件包有未满足的依赖关系 解决方案
  • W25Q64的学习
  • 吉客云与金蝶云星空系统高效数据对接实践
  • 好/坏代码实例解读:图文并茂说明
  • 变频器启动、停止、正/反转控制电路原理详解
  • 现在设备普遍切换成TYPE-C适配器后,一拖三数据线接口变革探析
  • 卡牌抽卡机小程序,带来新鲜有趣的拆卡体验
  • 006:看图软件ACDSeePhotoStudio2019安装教程
  • gaussdb hccdp实验练习02 GaussDB数据库开发设计
  • PDF无法转换成其他格式的常见原因与解决方法解析
  • 【LangChain系列3】【检索模块详解】