通過《如意玲瓏應用構建指南(一):規范體系與配置文件全解析》的學習后,相信大家已經對玲瓏應用構建工程基礎知識有了一定的了解。在接下來的系列推文中,我們將深入實操環節,帶大家利用所學知識正式構建玲瓏應用。
本篇作為“如意玲瓏應用構建從入門到實戰”系列的第二篇,我們將以開源圖形應用 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 構建項目。
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 庫不能滿足條件:
-- 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 構建項目。
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 來指定動態運行庫尋找路徑。
由此可見,qBittorrent 已經成功在如意玲瓏應用容器中成功編譯并運行!
關于項目
如意玲瓏(Linyaps)是一種新型的獨立包管理工具集,專注于解決 Linux 系統下由傳統軟件包格式的復雜性和交叉依賴關系引起的兼容性問題。項目通過先進的隔離技術,將應用與系統完全解耦,從根本上解決因環境變化引發的應用兼容性問題,實現“一個架構,一次構建”,致力于簡化軟件開發流程、降低維護成本、加強數據安全,促進技術與平臺間的協同合作,構建一個更加繁榮、安全和高效的 Linux 軟件生態環境。
-
開源
+關注
關注
3文章
3475瀏覽量
42967 -
容器
+關注
關注
0文章
502瀏覽量
22206 -
編譯
+關注
關注
0文章
668瀏覽量
33235
原文標題:如意玲瓏應用構建指南(二):在玲瓏容器中編譯基于 Qt5 的開源應用
文章出處:【微信號:linux_deepin,微信公眾號:深度操作系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論