0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在玲珑容器中编译qBittorrent并测试运行

深度操作系统 来源:深度操作系统 2025-03-10 11:26 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

通过《如意玲珑应用构建指南(一):规范体系与配置文件全解析》的学习后,相信大家已经对玲珑应用构建工程基础知识有了一定的了解。在接下来的系列推文中,我们将深入实操环节,带大家利用所学知识正式构建玲珑应用。

本篇作为“如意玲珑应用构建从入门到实战”系列的第二篇,我们将以开源图形应用 qBittorrent 为例,为大家将演示如何进入玲珑容器、以及如何在玲珑容器中编译 qBittorrent 并测试运行。

01前期准备

根据玲珑应用构建工程通用资源的规范要求,我们应当为一款图形化应用同时提供保障桌面用户体验的 icons 图标文件及 desktop 启动文件。但本节实操演示仅在玲珑容器中进行编译、测试操作,因此暂时不需要准备通用资源。 本次分享基于 deepin 23 发行版,因此在进行以下任意步骤前均需要准备一个可以构建玲珑应用的 deepin 23 系统环境:

确保环境中已经安装 ll-builder 构建套件, 不同发行版安装方式参考如意玲珑安装教程[1];

由于在构建过程中我们需要联网获取玲珑容器的运行库以及可能需要的第三方库,因此我们需要保障全操作过程能够得到顺畅的网络连接;

在通过玲珑容器编译前, 最好先在比较接近本次构建容器的 deepin 23 中成功编译过 qBittorrent,以确保你对源代码编译有一定的了解

结合上一节玲珑应用构建工程 linglong.yaml 规范,并按照以下模板简单编写一版玲珑构建工程配置文件 linglong.yaml,以此来生成一个符合要求的容器。

主要有以下两个方面需要关注:

由于本次操作是直接进入容器进行操作,因此 build 部分的构建规则可不详细写;

由于本次涉及编译操作,为了能够极大程度包含所需的运行库,我们加入 runtime 段,具体编写规范参考《如意玲珑应用构建指南(一)》。

# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
#
# SPDX-License-Identifier: LGPL-3.0-or-later


version: "4.6.7.2"


package:
  id: org.qbittorrent.qBittorrent
  name: "qBittorrent"
  version: 4.6.7.2
  kind: app
  description: |
    qBittorrent binary


base: org.deepin.foundation/23.0.0
runtime: org.deepin.Runtime/23.0.1


command:
  - /opt/apps/org.qbittorrent.qBittorrent/files/bin/qbittorrent


source:
  - kind: local
    name: "qBittorrent"


build: |
  mkdir -p ${PREFIX}/bin/ ${PREFIX}/share/

02项目编译演示

在这里需要回顾一个知识点: 根据玲珑应用目录结构规范,与构建工程配置文件 linglong.yaml 同级的构建目录将被映射为 /project 目录。

万事俱备,我们就可以开始编译了

1. 为了方便操作,在构建目录下同时开启两个 shell 窗口,分别用于玲珑容器操作普通操作

2. 在完成准备 linglong.yaml 编辑后,我们就可以开始生成容器了,执行有限的操作以直接进入玲珑容器:

szbt@szbt-linyaps23:/media/szbt/Data/ll-build/QT/qBittorrent-git$ ll-builder build --exec bash
路径发生类似以下变化时,即意味着我们已经进入玲珑容器中了。
szbt@szbt-linyaps23:/project$
3.通过普通操作窗口解压 qBittorrent-4.6.7 源码到构建目录中,我这里单独解压到一个子目录中。
szbt@szbt-linyaps23:/media/szbt/Data/ll-build/QT/qBittorrent-git$ tar -xvf qBittorrent-4.6.7-git-origin-src.tar.zst -C src/

4. 源码解压后,根据玲珑应用构建基本步骤,我们在编译任意源代码前应该正确选择使用何种编译系统/工具。我们通过观察 qBittorrent-4.6.7 源码目录, 可以看到其存在 CMakeLists.txt 文件,这是 CMake 构建项目。

00f9943e-fa74-11ef-9310-92fbcf53809c.png

5.由于 qBittorrent INSTALL[2]中简要描述了本项目主要使用的运行库,因此我们可以对照此文档来判断哪些运行库存在与玲珑提供的 base、runtime 中,或哪些运行库并未被提供。对于暂未被正式提供的运行库,在编译主程序前我们可能需要先预编译必要的第三方库。

由于文档所述需要的运行库较少,此次我们可以先直接进行一次测试编译来确认运行库缺失情况。

6.通过玲珑容器操作窗口进入源码目录,为了尽量避免对源目录的干扰,我这里新建一个 build 目录用于编译。进入 build 目录后我们输入 CMake 相关配置参数来配置构建工程。

根据玲珑应用目录结构规范,我们将 DCMAKE_INSTALL_PREFIX 赋予 $PREFIX 的值,最终我在本地执行了以下操作:

  cmake -DCMAKE_BUILD_TYPE=Release
 -DCMAKE_INSTALL_PREFIX=$PREFIX ..

7. 可以从图中看到,这里出现了一个错误导致无法完成配置。我们看到 pkg-config 出现错误:libtorrent-rasterbar>=1.2.19 库不能满足条件:

010b0d86-fa74-11ef-9310-92fbcf53809c.png

-- Found PkgConfig: /bin/pkg-config (found version "1.8.1") 
-- Checking for module 'libtorrent-rasterbar>=1.2.19'
单独通过 pkg-config 亦无法获取该库的相关信息:
szbt@szbt-linyaps23:/project/src/qBittorrent-release-4.6.7-szbt2/build$ pkg-config --print-provides libtorrent-rasterbar

结合此报错,基本可以判断为该库缺失,因此我们需要在编译主程序前编译并安装此第三方库。

8. 返回普通操作窗口将 libtorrent-rasterbar>=1.2.19 库对应的源码下载到当前构建目录中,进入玲珑容器操作窗口重新编译。

9. 源码解压后,根据玲珑应用构建基本步骤,我们在编译任意源代码前应该正确选择使用何种编译系统/工具。我们通过观察 libtorrent-rasterbar-2.0.9 源码目录,可以看到其存在 CMakeLists.txt 文件,这是 CMake 构建项目。

014206ce-fa74-11ef-9310-92fbcf53809c.png

10. 我们通过玲珑容器操作窗口进入源码目录,为了尽量避免对源目录的干扰,我这里新建一个 build 目录用于编译。进入 build 目录后我们输入 CMake 相关配置参数来配置构建工程。

根据玲珑应用目录结构规范,我们将 DCMAKE_INSTALL_PREFIX 赋予 $PREFIX 的值,最终我在本地执行了以下操作:

  cmake -DCMAKE_BUILD_TYPE=Release
 -DCMAKE_INSTALL_PREFIX=$PREFIX ..
  make -j$(nproc)
  make install

可以看到, 第三方库 libtorrent-rasterbar-2.0.9 成功完成编译并安装到容器的 $PREFIX 目录中了,我们可以开启下一个操作。

11. 我们返回玲珑容器操作窗口进入 qBittorrent-4.6.7 源码目录,重新执行配置、编译、安装操作, 均不存在报错了。

03编译结果测试

流程结束后,在 $PREFIX 目录中找到该项目的二进制执行文件并在容器中运行测试,该二进制执行文件为: /opt/apps/org.qbittorrent.qBittorrent/files/bin/qbittorrent 注意,该操作需要在图形化桌面的终端操作,否则有可能无法调起程序的图形界面。

由下图可见并不是直接通过容器启动,发生了运行库无法找到的问题,因为报错的库也在 $PREFIX 中,因此我们直接通过变量 LD_LIBRARY_PATH 来指定动态运行库寻找路径。

014f796c-fa74-11ef-9310-92fbcf53809c.png

由此可见,qBittorrent 已经成功在如意玲珑应用容器中成功编译并运行!

关于项目

如意玲珑(Linyaps)是一种新型的独立包管理工具集,专注于解决 Linux 系统下由传统软件包格式的复杂性和交叉依赖关系引起的兼容性问题。项目通过先进的隔离技术,将应用与系统完全解耦,从根本上解决因环境变化引发的应用兼容性问题,实现“一个架构,一次构建”,致力于简化软件开发流程、降低维护成本、加强数据安全,促进技术与平台间的协同合作,构建一个更加繁荣、安全和高效的 Linux 软件生态环境。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源
    +关注

    关注

    3

    文章

    4031

    浏览量

    45545
  • 容器
    +关注

    关注

    0

    文章

    521

    浏览量

    22808
  • 编译
    +关注

    关注

    0

    文章

    687

    浏览量

    34935

原文标题:如意玲珑应用构建指南(二):在玲珑容器中编译基于 Qt5 的开源应用

文章出处:【微信号:linux_deepin,微信公众号:深度操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式Qt-做一个秒表

    本篇通过一个秒表的实例,介绍了如何使用Qt Creator的UI界面设计功能,进行Qt的开发,并将代码进行交叉编译,放入i.MX6ULL的Linux环境测试运行情况。
    的头像 发表于 09-08 08:52 3046次阅读
    嵌入式Qt-做一个秒表

    何在裸机环境运行KleidiAI微内核

    探索如何在裸机环境运行 KleidiAI 内核,通过测试多款 C/C++ 编译器,以确定如何
    的头像 发表于 08-08 15:16 3626次阅读
    如<b class='flag-5'>何在</b>裸机环境<b class='flag-5'>中</b><b class='flag-5'>运行</b>KleidiAI微内核

    何在Docker创建容器

    Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bar
    发表于 01-03 15:58

    C6748程序测试运行速度很慢

    写了一小段程序,测C6748程序运行速度,实际上就是通过用for循环对数组循环赋值,测试运行速度,程序如下:unsigned charbuffer[1024];void RunSpeedTest
    发表于 09-19 07:51

    如何又好又快的测试多组稳速电机?

    用户设置的参数自动配置仪器的状态,完成对产品的测试。 参数设置界面4、测试运行界面进入到测试运行界面,测试人员在运行
    发表于 11-15 11:03

    倍福TwinCAT应用教程12.1 TwinCAT控制松下伺服 连接和试运行

    首先是用松下伺服自带的软件可以测试运行(驱动器,电机都连接好,然后用USB线连接到松下伺服驱动器的X1口),打开调试软件会自动提示连接到伺服 一般需要对驱动器清除绝对值编码器数据(驱动器可能报错40
    发表于 07-02 07:29

    何在嵌入式容器Jetty或Tomcat运行带有Maven的Java Web应用程序

    在开发Java Web应用程序时,从“真实”环境获得快速反馈非常实用。 在本文中,我将探讨如何在嵌入式容器Jetty或Tomcat运行
    发表于 12-16 06:24

    矢量字库移植测试的相关资料推荐

    单片机移植矢量字库,测试运行速度
    发表于 01-10 07:15

    怎样把编译好的Uboot写入station p2开机试运行一次呢

    怎样把编译好的Uboot写入station p2开机试运行一次呢?
    发表于 03-02 07:56

    大佬们,如何测试运行一条指令要多少时间?

    大佬们,如何测试运行一条指令要多少时间,我目前想用定时器中断做步进电机S型加减速,想在回调函数内关全局中断,最后再打开,防止电机运行出错,这种想法是否可取?又该如何测试某条指令耗的时间有多少?
    发表于 09-08 15:35

    为蓝牙RF测试测试运行edgefast_ blueooth_ shell,按下命令bt. init没有反应是怎么回事?

    我正在尝试为蓝牙 RF 测试测试运行“ edgefast_ blueooth_ shell ” 演示。 但是, 如果我运行演示并按下命令“ bt. init ” , 它没有反应, 我无法输入任何
    发表于 11-13 07:28

    何在Docker容器运行Nginx

    在本教程,您将学习如何将 Nginx 作为 Docker 容器运行,并将其公开给您的本地网络。此外,您将学习如何创建 Docker 数据卷以在容器和主机文件系统之间共享信息。
    的头像 发表于 02-17 09:30 2634次阅读

    何在 CFD 设计利用网格维护几何形状减少运行时间?

    何在 CFD 设计利用网格维护几何形状减少运行时间?
    的头像 发表于 11-24 17:07 1098次阅读
    如<b class='flag-5'>何在</b> CFD 设计<b class='flag-5'>中</b>利用网格维护几何形状<b class='flag-5'>并</b>减少<b class='flag-5'>运行</b>时间?

    如意玲珑应用构建规则实用案例

    通过《如意玲珑应用构建指南(二):在玲珑容器编译基于 Qt5 的开源应用》的学习后,相信大家已经基本了解了在
    的头像 发表于 03-25 11:17 795次阅读
    如意<b class='flag-5'>玲珑</b>应用构建规则实用案例

    【经验分享】在Omni3576上编译Redis-8.0.2源码,安装及性能测试

    本文首先介绍Redis是什么,然后介绍如何在Omni3576上编译Redis-8.0.2源码,以及从源码编译、安装Redis,最后介绍如何在Omni3576上
    的头像 发表于 06-05 08:05 758次阅读
    【经验分享】在Omni3576上<b class='flag-5'>编译</b>Redis-8.0.2源码,<b class='flag-5'>并</b>安装及性能<b class='flag-5'>测试</b>