# simplescreenrecorder-kai-ming-building **Repository Path**: Repository-LCL/simplescreenrecorder-kai-ming-building ## Basic Information - **Project Name**: simplescreenrecorder-kai-ming-building - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-11 - **Last Updated**: 2025-01-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # simplescreenrecorder-kai-ming-building #### 介绍 在面临传统包格式系统与应用无明确界限、发行版碎片化、兼容性等问题时,开明包格式(openKylin)作为一款新型软件包格式应运而生。开明包的核心目标是通过提供高兼容性、高安全性的解决方案,治理版本碎片化问题,并优化软件的安装与升级过程。 我选择了SimpleScreenRecorder 作为参与构建的开源软件,SimpleScreenRecorder 具有高效、易用的屏幕录制功能,在 Linux 系统中被广泛应用。通过本次构建任务,我们不仅将深入了解开明包的构建过程,还将体验其在提高软件兼容性和安全性方面的优势。最终,目标是生成可以在目标系统上离线安装并正常运行的 SimpleScreenRecorder 开明包(xxx.ok)。 #### SimpleScreenRecorder 项目介绍 **项目概述:** SimpleScreenRecorder(SSR)是一款用于 Linux 系统的简单且功能强大的屏幕录制工具。它支持录制整个屏幕或指定窗口,并能够以多种格式(包括 AVI、MKV、MP4 等)保存录制的内容。SSR 还具备实时预览和动态调整参数的功能,适用于桌面录制、游戏直播、软件演示等多种场景。其易用性、低资源消耗和高质量输出,使其成为 Linux 用户中广泛使用的屏幕录制工具之一。 **构建:** SimpleScreenRecorder 项目使用 CMake 作为构建系统,确保在不同的 Linux 环境中都能顺利构建。构建依赖包括 Qt、FFmpeg、ALSA 和 PulseAudio 等库,构建过程中,CMake 会自动检测并配置这些依赖。 SimpleScreenRecorder 的核心技术架构基于 C++ 编写,使用了多种高效的开源库来完成屏幕捕获和视频编码功能: - Qt:用于构建跨平台的图形用户界面(GUI),保证在不同 Linux 发行版上均能顺利运行。 - FFmpeg:用于视频和音频的编码、解码,支持多种格式的录制与输出。 - ALSA 和 PulseAudio:用于音频录制和管理,确保高质量的音频输入与输出。 - OpenGL:用于加速图形渲染,尤其是在录制游戏和高帧率应用时,提供流畅的体验。 #### 创建开明包构建清单 ``` # yaml模板中不必要的可删除,如需添加其他属性请查看清单规范:url(待添加) # 清单规范版本 version: “1” package: # string---app的id 具有唯一性 id: org.openkylin.simplescreenrecorder # string---起个名字,例如test name: simplescreenrecorder # string---版本号 version: 1.1.0.0 # string---默认为app kind: app base: stable:top.openkylin.base/2.0.0.0 channel: stable runtime: stable:top.ukui.runtime/2.0.0.0 command: - simplescreenrecorder components: - name: simplescreenrecorder buildsystem: cmake config-opts: - -DBUILD_TESTING=OFF - -DWITH_QT5=TRUE sources: - type: dir path: simplescreenrecorder ``` #### **构建过程中的问题与解决方案** ##### **问题描述** 在构建 **SimpleScreenRecorder** 时,出现了以下 CMake 错误: ``` CMake Error at /usr/share/cmake-3.28/Modules/FindQt4.cmake:1314 (message): Found unsuitable Qt version "5.15.1o" from /usr/bin/qmake, this code requires Qt 4.x Call Stack (most recent call first): src/CMakeLists.txt:28 (find_package) ``` ![输入图片说明](imageimage-1.png) 此错误提示的是 **CMake** 在构建过程中无法找到合适的 **Qt** 版本。具体错误信息表明,CMake 正在寻找 **Qt 4.x** 版本,而系统中安装的是 **Qt 5.15.1**,这导致构建过程失败。 ##### **问题分析** 该问题的根本原因在于 **CMakeLists.txt** 文件中,未正确指定使用 **Qt5** 而是默认设置为 **Qt4**。在构建过程中,CMake 尝试使用 **Qt4** 进行编译,而当前系统安装的是 **Qt5**,导致版本不匹配。 在 **CMakeLists.txt** 中,以下代码段定义了是否启用 **Qt5** 的选项: ``` option(WITH_QT5 "Build with Qt5 (instead of Qt4)." FALSE) ``` 由于默认值为 **FALSE**,CMake 尝试使用 **Qt4**。但是,系统上安装的是 **Qt5**,因此出现了版本不匹配的错误。 ##### **解决方案** 为了解决此问题,我们需要明确告知 CMake 使用 **Qt5** 进行构建。通过在构建清单或构建命令中添加 **-DWITH_QT5=TRUE** 选项,可以强制 CMake 使用 **Qt5** 进行构建。 ##### **具体解决步骤:** 1. **修改构建配置** 在 **SimpleScreenRecorder** 的构建配置文件中(例如:`org.openkylin.simplescreenrecorder.yaml`),添加 `-DWITH_QT5=TRUE` 参数: ``` yaml复制代码components: - name: simplescreenrecorder buildsystem: cmake config-opts: - -DBUILD_TESTING=OFF - -DWITH_QT5=TRUE # 强制使用 Qt5 sources: - type: dir path: simplescreenrecorder ``` 2. **清理旧的构建文件** 在重新运行构建之前,建议清理之前的构建文件,以确保新的配置能够正确生效: ``` rm -rf build/ rm -rf .kaiming-builder/ ``` 3. **重新构建项目** 重新运行构建命令,确保 CMake 使用 **Qt5** 进行构建: ``` kaiming-builder build -v -f -k org.openkylin.simplescreenrecorder.yaml ``` ![输入图片说明](imageimage-2.png) 4. **验证构建结果** 构建完成后,验证程序是否能够正确运行,确保 **Qt5** 被正确配置并启用了。 ##### **解决方案效果** 通过在构建配置文件中添加 `-DWITH_QT5=TRUE`,成功解决了 Qt 版本不匹配的问题,确保构建过程中使用的是 **Qt5** 版本而非 **Qt4**。此解决方案在实际应用中行之有效,可以避免因版本不兼容导致的构建失败。 ##### **总结** - **失败原因**:CMake 默认使用 **Qt4**,而系统中安装的是 **Qt5**,导致版本不匹配。 - **解决方案**:通过在构建配置中添加 `-DWITH_QT5=TRUE`,强制使用 **Qt5** 进行构建。 - **效果验证**:此解决方案解决了版本不匹配问题,构建成功并且软件正常运行。 #### 生成离线包 执行命令`kaiming-builder build`构建并打包,`kaiming-builder build`命令执行之后构建内容保存在工程目录的`build`文件夹中,并且在工作目录中生成一个`ok`离线包。 ``` kaiming-builder build -v -f -k --export org.openkylin.simplescreenrecorder.yaml ``` ![输入图片说明](imageimage-3.png)