999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于國產操作系統對開源軟件編譯方法的研究與應用

2023-07-10 14:00:32李森劉先群
計算機應用文摘 2023年11期

李森 劉先群

關鍵詞:開源軟件;編譯安裝;軟件包構建方法;信創終端;國產操作系統

中圖法分類號:TP316 文獻標識碼:A

近年來,信息技術應用創新(以下簡稱“信創”)產業蓬勃發展。然而,在推進信創工作中卻發現廣大用戶以國產軟件的生態系統不完善、應用程序不豐富、缺乏相應的軟件體系和軟件工程方法等為由而放棄使用。誠然,目前信創平臺的生態產品不夠豐富,尚未形成以操作系統為核心的軟件生態,部分Windows平臺常用或好用的軟件無法找到替代方案,軟件數量匱乏、功能缺少、操作體驗差等因素也降低了用戶對信創終端的使用信心。

開源軟件,即一種版權持有人向公眾公開軟件源代碼,并允許公眾下載、編譯的軟件。國產操作系統基于開源Linux內核研發,開源軟件是國產軟件發展的基礎。開源軟件在整個軟件行業中占有重要地位,其開發模式成為技術創新和推動軟件產業發展的主要方式。引入主流Linux社區的開源軟件生態能很好地增添當下國產軟件生態的多樣性,豐富用戶的信創終端使用體驗,軟件業的發展也為國產操作系統的發展提供了基礎性的技術支持。

本文通過對優質的開源軟件進行重新編譯、部署安裝,首創了一套基于開源軟件在國產化平臺上編譯安裝的方法。該方法基于Linux與國產操作系統的特性進行編制,采用一站化的方式對開源軟件的二進制包執行軟件包構建,降低用戶對國產操作系統的學習成本,快速上手感受豐富的開源軟件生態。該方法能夠快速有效地豐富信創軟件生態產品,促進信創軟件從“可用”到“好用”的轉變。

1開源軟件的編譯與運行

開源軟件在Linux系統上的運行離不開編譯,用戶自行按照軟件作者提供的編譯指引將軟件的源碼包編譯為二進制包,從而完成編譯到運行。國產操作系統在開源Linux內核的基礎上進行研發,繼而可從Linux上的編譯方法引申出國產操作系統上的編譯方法。下文將介紹開源軟件中的源碼包與二進制包關系以及3種主流編程語言的編譯方法,為后續軟件包部署方法打下基礎。

1.1源碼包與二進制包

源碼包就是一大堆源代碼程序,是由程序員按照特定的格式和語法編寫出來的。計算機只能識別機器語言,即二進制語言,所以源碼包的安裝需要一名“翻譯官”將“abcd”翻譯成二進制語言,這名“翻譯官”通常被稱為編譯器。常規的開源軟件發行版中的源碼包文件名都帶有src,并且是gz等壓縮包格式。

所謂二進制包,是指源碼包經過成功編譯成二進制字節碼之后產生的文件集。只需下載和解包(安裝)它們之后,就可立即使用。軟件包的內容是01二進制代碼(通常以16進制顯示),即這些文件是計算機能直接識別的(計算機只能識別處理01二進制)。

各種開發語言的編譯器或者解釋器都無法做到同源異構,但是二進制包能夠做到一處編譯各處運行。二進制包通過編譯完成后的可執行文件運行,開源作者一般提供的二進制包后綴為tar.gz,tgz等,有時會帶有版本號、適應平臺、適應的硬件類型等,例如eclipse-jee-2022-03-R-linux-gtk-aarch64.tar.gz。

而二進制包的表現形式有2種,1種是上文提到的gz后綴的壓縮包形式,另1種則是基于前種形式構建而成的軟件包形式,例如rpm和dpkg。

1.2不同開發語言的編譯方式

1.2.1 Java

通常而言,在開發Java應用時,先使用Java編譯器把Java源代碼(.java)文件編譯為字節代碼(.class文件),可以說Java程序是由若干個.class文件組成的。因此,從源碼包到可運行JAR包,其實就已經完成了編譯過程。

以下為開源軟件創建可運行JAR文件包的幾種常見的方式。

(1)使用IDE(集成開發環境)進行創建。Java語言知名的IDE均內置了創建可運行JAR文件包的功能,例如Eclipse,IntelliJ IDEA等。

(2)使用MVN命令進行構建。當下較多的Java開源項目都使用了Maven這個跨平臺的項目管理工具,Maven項目的標志性在于根目錄下會存放1個pom.xml文件。

(3)使用開發者文檔中推薦的創建方式。有些開發者會有符合自己開發習慣的創建方法,建議參照執行。

(4)也可使用命令jar cvfm test.jar manifest.mf test構建,manifest.mf即為Java程序的一種配置文件。不過,這種方式較為煩瑣,不推薦使用。

1.2.2 Python

使用Python語言開發的開源軟件,其編譯安裝的核心在于Python環境的搭建,而Java,Python軟件的依賴包均需要手動安裝。部分Python開源軟件也會提供一個requirements.txt來指導用戶安裝所需的依賴包。由于其開發規則與用途的多元性,導致編譯安裝方式繁多。但也存在較多的Python開源項目源碼包中配置好了可直接運行的主方法或可執行文件,一般在源碼包的根目錄下。當然,這種形式并非完全不需要編譯安裝,運行時還是會受到依賴缺失或沖突的影響報錯。不過,這種方式可以配合Pylnstaller工具,實現重編譯輕安裝,幾乎無需將編譯安裝留給用戶。

Pylnstaller主要的功能是將.py文件打包為二進制字節碼的可執行文件,只要編譯安裝的環境依賴正常并能成功執行Python開源軟件,那么使用該工具生成的可執行文件則能做到處處運行,無需額外安裝依賴。Pylnstaller推薦使用將所有相關文件打包成一個可執行文件的方式,命令參考如下:

pyinstaller-F目標文件.py

1.2.3 C/C++

使用C/C++開發的開源軟件,不僅需要C/C++依賴環境的搭建,還需根據軟件作者的指引進行編譯。C/C++開源軟件最基本的編譯安裝方法就是使用Makefile,軟件作者通常會自己編寫一份Makefile來指導make的編譯,在軟件根目錄輸入以下基本的編譯命令即可:

./configure&&make

#注意這些命令大多需要獲取root權限

在./configure那一步就會告知環境里是否缺少必要依賴,若依賴滿足,執行make后通常會在軟件根目錄下生成對應的二進制可執行文件。這一整個過程就相當于從源碼包到二進制包的轉換。

目前主流的編譯工具基于make,但是需要安裝不同的依賴,執行命令和方式也有所改變,本文主要介紹qmake和cmake。

(1)qmake需要完整的安裝qtbase系列的依賴包,使用qmake編譯的軟件通常其作者會有特別說明,或者是查看軟件根目錄中是否存在.pro后綴的文件。大致的編譯流程命令如下(根據軟件的不同可能會有所變化):

qmake該軟件的.pro&&make

(2) cmake需要安裝cmake軟件包。同qmake,可以通過查看軟件根目錄中是否存在CMakeLists.txt的文件來識別是否使用cmake編譯。大致的編譯流程命令如下:

mkdir build&&cd build

cmake..

之后編譯安裝生成的二進制可執行文件以及相關文件都會在build目錄下。

2開源軟件打包方法設計與實現

基于Debian

Linux的軟件包構建(打包)方法本質上就是將二進制包構建成軟件包,方便用戶安裝和使用。上文已闡述了Java,Python和C/C++這3種常見開發語言編譯生成二進制包的方法,然而不同語言編譯生成的二進制包,該如何構建并方便用戶安裝和使用的軟件包?下文通過對Debian Linux以及國產操作系統的打包方法進行分析之后,設計并實現了一套通用的打包方法。

2.1軟件包部署方式

國產操作系統其軟件部署方式也是源于Linux平臺下的軟件部署方式。該方式主要通過軟件包管理系統來實現,具有代表性的2類包管理系統為rpm(RedHat Package Manager)和dpkg (DebianPackager)。dpkg是Debian Linux操作系統使用的軟件包管理系統,其文件后綴為.deb,通過apt工具安裝,其中統信桌面操作系統、銀河麒麟桌面操作系統V10均是采用dpkg來進行軟件部署。

2.2 Debian Linux的打包方法

(1)構建打包目錄。

構建1個用于存放打包文件的臨時文件夾,文件夾命名為應用名稱,以下是打包目錄的結構:

DEBIAN文件夾中存放的是應用的描述性文件,如control, rules, changelog, install, copyright。/opt/apps/com.apps.demo文件夾中存放的是應用相關的文件。例如,子目錄entries/applications下存放的是應用的桌面啟動器文件(類Windows下的快捷方式),entries/icons下存放的是應用的圖標,entries/files下存放的則是應用的二進制包。

(2)修改control,rules,install等描述性文件。

control文件記錄了軟件的相關信息,rules文件指定了軟件的安裝規則,install文件指定了軟件安裝的目的路徑。

(3)創建.desktop文件(桌面啟動器)。

語法解釋如下:

[Desktop Entry] #文件頭

Name #英文名稱

Comment #軟件英文注解

Exec #軟件運行文件絕對路徑

Icon #圖標名

Terminal #是否使用終端

Type #啟動器類型

Categories #應用類型

(4)放人源文件與圖標文件。

將矢量圖格式(后綴名為SVG)的圖標文件放入打包目錄下的/us r/share/ic ons/hic olor/sc alable/apps,若是其他格式(如PNG格式),則需要放入打包目錄下的/usr/share/icons/hicolor/128×128/apps,其中128×128為圖標文件的分辨率。

軟件的源文件則需要解壓后,將所有文件放人打包目錄下的/opt/apps/軟件名稱/目錄。

(5)構建deb包并驗證安裝。

使用命令dpkg-deb--build“構建的打包目錄”,來構建deb軟件包。構建成功后,使用sudo dpkg-i對該軟件包.deb進行驗證安裝,看軟件包是否可以在啟動器上顯示圖標,正常運行即可。

2.3國產桌面操作系統打包方法異同

2.3.1統信桌面操作系統V20(UOS)

UOS的打包目錄與Debian Linux的區別主要在于根目錄中多出了1個info文件,其作用是應用的描述文件,使用json格式,info內容如下:

2.3.2銀河麒麟桌面操作系統V20(Kylin)

Kylin的打包方法與Debian Linux基本一致,打包目錄結構差異不大,主要的改動在于補齊了桌面啟動器.desktop文件中的軟件中文注解,具體如下:

[Desktop Entry]

#文件頭

Name #英文名稱

Name[zh_CN] #中文名稱

Comment #軟件英文注解

Comment[zh_CN]#軟件中文注解

Exec #軟件運行文件絕對路徑

Icon #圖標名

Terminal #是否使用終端

Type #啟動器類型

Categories #應用類型

2.3.3打包方法異同分析

由上文可知,統信UOS打包方法相較于Debian Linux與麒麟Kylin,最大的差異在于取消了打包目錄下的/usr/share/目錄,軟件的icons圖標文件以及桌面啟動器.desktop文件均放人打包目錄下的/opt/apps/軟件包名/。UOS官方的說明為軟件包不允許直接向$ HOME目錄直接寫入文件,后期系統將會使用沙箱技術重新定向$ HOME,任何依賴該特性的行為都可能失效。

統信UOS強調自己獨特的生態建立,而麒麟Kylin選擇的是擁抱Debian Linux,以尋求更廣泛的軟件適用性。

2.4國產桌面操作系統通用打包方法設計

(1)主要改動點。

基于國產操作系統通用打包方法的設計,可以讓開源軟件在任意的國產操作系統甚至Debian Linux上都能完成打包并正常運行。

首先,結合二者的差異點,保留打包目錄下的/usr/share目錄,將桌面啟動器文件.desktop分別放入/usr/share/applications/,/opt/apps/軟件名稱/entries/applications這2個目錄下,保證兼容兩家的桌面啟動器規則。其次,不新增打包目錄下的info文件,實驗中發現在統信UOS上使用DEBAIN/control文件和桌面啟動器.desktop文件可以滿足軟件信息的描述。最后,軟件的icons文件僅放人/opt/apps/軟件名稱/entries/icons目錄,在桌面啟動器.desktop文件中指向對應圖標即可,實驗中發現這種方式在麒麟Kylin上得到了很好的表現,圖標可以正常展示。

(2)打包目錄調整。

改動后的打包目錄如下:

(3)一站式打包腳本設計。

以知名的開源性能測試工具軟件——Jmeter為例,完整的打包腳本設計如下:

#! /bin/sh

#包名--也是相對文件的目錄名

dpkg-deb--build $ APPDIR

#刪除臨時文件夾

rm-rf $ APPDIR

2.5打包過程與結果展示

本次打包實驗均在國產桌面整機上完成,仍以JMeter為例,具體配置信息如表1所列。

(1)將腳本與軟件文件夾放在同級目錄下,修改軟件文件夾名稱為包名(或其他名稱與腳本內一致即可),然后執行腳本。具體如1所示。

(2)打好的deb包在統信桌面操作系統V20、銀河麒麟桌面操作系統Vl0下均能正常安裝,軟件運行與使用體驗與二進制包的原生版本一致。具體如圖2、圖3、圖4所示。

3結束語

本文對不同開發語言的開源軟件在國產操作系統上的編譯進行了歸納分析,并對不同國產操作系統上的打包方式進行了總結分析,得出一套通用的打包方法,填補了這方面的空白。經過實驗可以看到,同一個安裝包即可在不同的國產操作系統上完成安裝,使用體驗良好。通過提升開源軟件編譯安裝部署的便利性,有助于推廣信創生態和提升信創生態的用戶黏性,更能加快國產軟件行業的適配與發展。

本文的不足在于沒能研究得出編譯到部署安裝的一套方法,開源軟件的編譯過程仍需要一定的Linux知識以及編程能力。展望未來,希望更多的開源軟件能夠擁抱信創生態,為國產操作系統進行適配,降低用戶的使用門檻、豐富信創軟件生態。

作者簡介:

李森(1981—),碩士,高級工程師,研究方向:計算機應用與網絡安全。

劉先群(1988—),本科,研究方向:軟件編程和軟件測試。

主站蜘蛛池模板: 91麻豆国产视频| 国产成年女人特黄特色大片免费| 久久人与动人物A级毛片| 国产一区免费在线观看| 青青久久91| 國產尤物AV尤物在線觀看| 国产精品网址在线观看你懂的| 欧美精品不卡| 怡红院美国分院一区二区| P尤物久久99国产综合精品| 99热亚洲精品6码| 国产v精品成人免费视频71pao| 欧美另类图片视频无弹跳第一页| 91精品国产自产在线老师啪l| 国产91高清视频| 国产成人免费视频精品一区二区| 国产va欧美va在线观看| 不卡午夜视频| 国产精品一区二区国产主播| 小蝌蚪亚洲精品国产| 欧美精品一二三区| 制服丝袜亚洲| 韩国自拍偷自拍亚洲精品| 中文字幕调教一区二区视频| av尤物免费在线观看| 亚洲日韩精品欧美中文字幕| 99青青青精品视频在线| 久久国产拍爱| 中文字幕佐山爱一区二区免费| 国产永久免费视频m3u8| 久久黄色一级片| 亚洲av日韩av制服丝袜| 91在线播放国产| 四虎影视8848永久精品| 欧美高清国产| 欧美在线精品一区二区三区| 午夜福利亚洲精品| 一级毛片无毒不卡直接观看| 国产高清毛片| 久久情精品国产品免费| 亚洲一级毛片在线观播放| 最新痴汉在线无码AV| 国产迷奸在线看| 波多野结衣一二三| 日本一区高清| 国产肉感大码AV无码| 色视频国产| 五月激情婷婷综合| 国产视频a| 欧亚日韩Av| 精品欧美日韩国产日漫一区不卡| 在线国产资源| 日本久久久久久免费网络| 福利一区在线| av天堂最新版在线| 精品国产自在在线在线观看| 中文纯内无码H| 久久久久中文字幕精品视频| 国产成人乱码一区二区三区在线| 制服无码网站| 99精品免费欧美成人小视频| 亚洲精品国产精品乱码不卞| 熟女成人国产精品视频| 亚洲国产精品国自产拍A| 99在线观看国产| 91综合色区亚洲熟妇p| 午夜激情婷婷| 亚洲欧美日韩中文字幕在线| 日本人妻一区二区三区不卡影院| 国产三级毛片| 欧美成人午夜在线全部免费| 97成人在线观看| 毛片在线看网站| 国产一级毛片在线| 亚洲精品欧美日本中文字幕| 成年看免费观看视频拍拍| 日韩欧美成人高清在线观看| 亚洲一区二区三区香蕉| 天堂成人在线| 亚洲IV视频免费在线光看| 色国产视频| 日韩中文无码av超清|