【Qt】之【Linux】Qt 5.12.8 单独编译 qtvirtualkeyboard 模块源码

embedded/2025/2/21 2:36:54/

前言

背景

使用系统自带的(不是自己下载编译的)Qt 5.12.8 运行Qt Creator 项目
但是系统自带的Qt缺少一些库,比如本文提到的 qtvirtualkeyboard 库
因此需要编译同版本的模块库文件

编译平台

Mac Mini 下的VMware Fusion虚拟机 — aarch64环境下直接编译源码,无需交叉编译

qt___5128_7">默认的qt版本 === 5.12.8

步骤

官网下载Qt 5.12.8 源码压缩包并解压 qt-everywhere-src-5.12.8

编译整个 Qt 源码

  1. 源码目录同级目录下创建 build5.12.8(存放编译过程中文件)、linux_aarch64(存放编译后的文件)文件夹,创建配置脚本文件autoConfigure.sh:
../qt-everywhere-src-5.12.8/configure \-prefix ../linux_aarch64 \-nomake examples \-nomake tests \-skip qtwebengine \-skip qtcharts \-skip qt3d \-skip qtdeclarative \-skip qtquickcontrols \-skip qtquickcontrols2 \-skip qtmultimedia \-skip qtwebsockets \-skip qtlocation \-skip qtsensors \-skip qttools \-skip qttranslations \-v

在这里插入图片描述

  1. 执行脚本,进行编译安装
sudo chmod +x autoConfigure.sh
./autoConfigure.sh
make
sudo make install

4.查看 linux_aarch64 目录
在这里插入图片描述

至此按理说 qt 模块除了 skip 的几个应该都编译成功,但是查看时并没有发现 qtvirtualkeyboard 相关的文件,且在configure 阶段就没有配置出来。

于是决定单独编译 qtvirtualkeyboard 模块源码:

qtvirtualkeyboard__48">单独编译 qtvirtualkeyboard 模块

  1. 进入 Qt 源码目录,找到 qtvirtualkeyboard
    文件夹进去
    在这里插入图片描述

  2. 执行
    :没有特意指明编译后的文件路径,因此会放在系统设置的默认Qt版本目录下

qmake qtvirtualkeyboard.pro
make
sudo make install

过程中会报错,有关于 QtGUI 和 QtCore 的,
原因是 qtvirtualkeyboard 源码调用依赖到这两个模块的头文件,但是前文提到系统自带的 Qt 缺少一些库(文件,文件夹),因此编译源码时会报错。
(推测前面编译整个 Qt 源码时没有编译出 qtvirtualkeyboard 模块也是因为依赖的库文件不存在,因此跳过了)

  1. 移动第一阶段编译 Qt 源码后的两个模块的相关private文件
sudo cp -r /home/sr/Public/qt5/qt5.12.8-1/linux_aarch64/include/QtGui/5.12.8 /usr/include/aarch64-linux-gnu/qt5/QtGui/
sudo cp -r /home/sr/Public/qt5/qt5.12.8-1/linux_aarch64/include/QtCore/5.12.8/ /usr/include/aarch64-linux-gnu/qt5/QtCore/
  1. 重复步骤2命令,编译安装成功!

http://www.ppmy.cn/embedded/163422.html

相关文章

1、Window Android 13模拟器 将编译的映像文件导入Android Studio

1、环境准备 编译环境:Ubuntu-18.04.5编译版本:android13-release下载地址:清华大学开源软件镜像站AOSP # 下载repo # 同步代码:repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android13-r…

TCP的拥塞控制

什么是TCP的拥塞控制?它的工作原理是什么?为什么需要拥塞控制? TCP拥塞控制简介 想象一下,你和一群朋友在一条狭窄的小路上跑步。如果每个人都拼命跑,小路很快就会变得拥挤不堪,大家互相碰撞,…

C++ ——构造函数

1、作用:创建对象时,给对象的属性进行初始化 2、特点 (1)构造函数与类同名 (2)如果没有显式给出构造函数,编译器会给出默认的构造函数(参数为空,并且函数体也为空&#…

如何在 Visual Studio Code 中使用 DeepSeek R1 和 Cline?

让我们面对现实吧:像 GitHub Copilot 这样的 AI 编码助手非常棒,但它们的订阅费用可能会在你的钱包里烧一个洞。进入 DeepSeek R1 — 一个免费的开源语言模型,在推理和编码任务方面可与 GPT-4 和 Claude 3.5 相媲美。将它与 Cline 配对&#…

游戏数据中枢系统的架构设计与实现——以GameDataOrchestrator为核心的模块化数据管理体系

一、架构全景与设计哲学 本文将以重构后的GameDataOrchestrator为核心,深入剖析现代游戏引擎中的数据管理系统设计。该架构采用"分治-聚合"的双向管理模式,通过七大核心模块的有机协作,构建了层次分明、职责明确的数据管理体系。我…

细胞计数专题 | LUNA-FX7™新自动对焦算法提高极低细胞浓度下的细胞计数准确性

现代细胞计数仪采用自动化方法,在特定浓度范围内进行细胞计数。其上限受限于在高浓度条件下准确区分细胞边界的能力,而相机视野等因素则决定了下限。在图像中仅包含少量可识别细胞或特征的情况下,自动对焦可能会失效,从而影响细胞…

【简历优化】性能调优 — 编程性能调优篇

😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本文讲解【简历优化】性能调优 — 编程性能调优篇,期待与你一同探索、学习、进步,一起卷起来叭! 目录 一、编程性能调优字符串String 发展优…

聊聊 IP 地址和端口号的区别

在计算机网络中,两个基本概念对于理解设备如何通过网络进行通信至关重要。IP 地址和端口号是 TCP/IP 的典型特征,其定义如下:IP 地址是分配给连接到网络的每台机器的唯一地址,用于定位机器并与其通信。相反,端口号用于…