欧美日韩电影精品视频_亚洲天堂一区二区三区四区_亚洲欧美日韩国产综合_日韩精品一区二区三区中文_為您提供優質色综合久久88色综合天天

您的位置:首頁(yè) > 國(guó)際 >

世界要聞:Linux 下二進(jìn)制包 vs 源代碼包:你應(yīng)該選擇哪個(gè)?

2023-06-26 05:53:32 來(lái)源:Linux迷

評(píng)論

在Linux上安裝程序通常與在Windows上傳統(tǒng)的安裝軟件方式有所不同。你可以使用預(yù)構(gòu)建的軟件包,或者自己編譯程序。如今,預(yù)構(gòu)建軟件包通常是默認(rèn)的選擇,但在某些情況下,你可能想考慮從源代碼進(jìn)行編譯。

什么是二進(jìn)制包?

在Linux上安裝程序通常與在Windows上傳統(tǒng)的安裝軟件方式有所不同。而不是從供應(yīng)商的網(wǎng)站上下載安裝程序,文件來(lái)自于一個(gè)程序倉(cāng)庫(kù),通常根據(jù)你的Linux發(fā)行版進(jìn)行定制。你可以使用Linux軟件包管理器或應(yīng)用商店訪問(wèn)這個(gè)倉(cāng)庫(kù)。


(資料圖片僅供參考)

這些倉(cāng)庫(kù)中的程序由多個(gè)文件組成,并以一個(gè)歸檔格式進(jìn)行打包,以便于訪問(wèn)和分發(fā)。例如,Debian使用DEB格式存儲(chǔ)和分發(fā)程序。這些打包文件被稱(chēng)為二進(jìn)制包。

如何閱讀二進(jìn)制代碼

你需要一個(gè)特殊的程序來(lái)提取這些文件并將其安裝到計(jì)算機(jī)上,通常是你的軟件包管理器或應(yīng)用商店。這些工具還具有其他有用的功能,例如跟蹤已安裝的文件和管理軟件更新。

較新的軟件包格式,如Flatpak和Snap,適用于不同版本的Linux,但它們?nèi)匀挥深A(yù)編譯的二進(jìn)制程序組成。兩者都需要圖形化的應(yīng)用商店或基于命令行的軟件包管理器進(jìn)行安裝。

什么是源代碼?

所有軟件都由稱(chēng)為源代碼的文本行組成,用特定的編程語(yǔ)言編寫(xiě),例如C或C++。通常情況下,你不能只將這些源代碼打包成一個(gè)存檔文件并稱(chēng)之為軟件包。這些行需要被轉(zhuǎn)換為計(jì)算機(jī)可以理解和執(zhí)行的語(yǔ)言。

這個(gè)過(guò)程被稱(chēng)為編譯,最終的結(jié)果是創(chuàng)建出計(jì)算機(jī)可以運(yùn)行的二進(jìn)制文件。軟件包和軟件的區(qū)別在于,軟件的二進(jìn)制文件與其他文件(如配置文件)一起存儲(chǔ)在一個(gè)包中。

什么是“從源代碼安裝”?

從源代碼安裝程序意味著不使用軟件包管理器進(jìn)行安裝。你需要編譯源代碼,并將二進(jìn)制文件復(fù)制到計(jì)算機(jī)上。

大多數(shù)情況下,你可以從諸如GitHub、GitLab或Bitbucket等托管服務(wù)上下載項(xiàng)目的源代碼。較大的程序甚至可能在個(gè)人網(wǎng)站上托管源代碼。該代碼通常以一個(gè)歸檔格式(也稱(chēng)為源代碼包)進(jìn)行壓縮。

一組特殊的工具幫助自動(dòng)化構(gòu)建過(guò)程。在Linux桌面上,通常以一個(gè)名為make的命令行程序的形式存在。用不同語(yǔ)言編寫(xiě)的源代碼需要特定的編譯器和命令將其轉(zhuǎn)換為二進(jìn)制文件。make程序自動(dòng)化了這個(gè)過(guò)程。

為了使這個(gè)自動(dòng)化工作起來(lái),程序提供了一個(gè)名為Makefile的文件,告訴make應(yīng)該做什么和如何編譯。如今,Makefile通常由特殊的軟件(如CMake)自動(dòng)生成。這就是你需要介入的地方。從這里開(kāi)始,你可以指定想要編譯到軟件中的具體功能。

從源代碼構(gòu)建的示例

例如,下面的命令使用CMake為Calligra辦公套件生成一個(gè)配置文件。創(chuàng)建的文件告訴make程序只編譯Calligra的Writer組件。

cmake -DPRODUCTSET=WORDS -DCMAKE_INSTALL_PREFIX=$HOME/kde/inst5 $HOME/kde/src/calligra

完成這一步驟后,用戶只需運(yùn)行make工具來(lái)編譯并將結(jié)果復(fù)制到他們的計(jì)算機(jī)上。操作步驟如下:

makemake install

雖然這是編譯程序的一般模式,但還有許多其他安裝源代碼包的方法。例如,Gentoo Linux內(nèi)置了一種處理源代碼包的方法,使得該過(guò)程更快捷、更簡(jiǎn)便。但是構(gòu)建二進(jìn)制包需要比上述命令更多的步驟。

使用二進(jìn)制包的好處

如果你使用Linux,很可能有人預(yù)編譯了你已安裝的軟件。這比使用源代碼包更為常見(jiàn)。但是為什么會(huì)這樣呢?

1.二進(jìn)制版本更易管理

二進(jìn)制包不僅包含已編譯的安裝文件,還存儲(chǔ)了其他信息,使得你的包管理器能夠輕松跟蹤所有程序。例如,DEB文件(Debian及其衍生版的包格式)還包含重要信息,如程序運(yùn)行所需的其他軟件以及當(dāng)前版本。

這使得安裝包變得更加簡(jiǎn)單,因?yàn)槟悴恍枰獡?dān)心需要哪些其他文件才能成功運(yùn)行程序。你的包管理器可以從包本身讀取這些信息,并自動(dòng)下載所有必要的依賴項(xiàng)。

而當(dāng)從源代碼安裝程序時(shí),除非將代碼編譯為獨(dú)立的二進(jìn)制包,否則你將需要負(fù)責(zé)管理該軟件。你需要記住你需要哪些其他程序來(lái)使其工作,并自行安裝它們。

2.二進(jìn)制版本具有更好的穩(wěn)定性

負(fù)責(zé)維護(hù)包管理器倉(cāng)庫(kù)的人員往往會(huì)對(duì)二進(jìn)制文件進(jìn)行測(cè)試,并盡力修復(fù)出現(xiàn)的問(wèn)題。這可能導(dǎo)致提高穩(wěn)定性,因?yàn)榘S護(hù)人員可能會(huì)發(fā)現(xiàn)安裝源代碼的人可能忽視的問(wèn)題。

此外,包通常必須遵守一套嚴(yán)格的規(guī)則,以確保它們能在你的系統(tǒng)上運(yùn)行。例如,Debian和Ubuntu都有一個(gè)政策手冊(cè),許多其他Linux發(fā)行版也有類(lèi)似的手冊(cè)。

有些程序還依賴于不同版本的同一軟件依賴項(xiàng)來(lái)運(yùn)行。軟件包倉(cāng)庫(kù)會(huì)盡力解決這些沖突,以免給你帶來(lái)麻煩。

編譯源代碼包的好處

從源代碼安裝程序并不是每個(gè)人都需要做的事情,因?yàn)槿绻麍?jiān)持使用二進(jìn)制包,通常更容易維護(hù)你的計(jì)算機(jī)。盡管如此,使用這種稍微復(fù)雜一些的方式安裝程序仍然有一些優(yōu)勢(shì)。

1.源代碼提供最新軟件

使程序更加可靠的一個(gè)缺點(diǎn)是需要時(shí)間來(lái)改進(jìn)和修復(fù)。有時(shí)候可能有可用的二進(jìn)制文件,但源代碼會(huì)稍后提供。對(duì)于希望擁有最新和最好的軟件的人來(lái)說(shuō),他們可能愿意在交換較新軟件的同時(shí)稍微犧牲一些穩(wěn)定性。

雖然有一些Linux操作系統(tǒng)可以滿足這種需求而無(wú)需編譯程序,但它們也有一些缺點(diǎn)。例如,那些不經(jīng)常發(fā)布固定軟件包版本的軟件在存儲(chǔ)庫(kù)中難以保持最新。相比之下,從源代碼安裝則不受這些限制。

這是因?yàn)槎M(jìn)制包通常是根據(jù)官方發(fā)布的程序版本制作的。因此,這些版本之間的更改通常不會(huì)被考慮在內(nèi)。通過(guò)從源代碼編譯自己的軟件,你可以立即從這些更改中受益。

也有可能你的Linux操作系統(tǒng)沒(méi)有預(yù)先為你準(zhǔn)備好你想要的軟件。過(guò)去,這將使得從源代碼安裝是唯一的選擇。通用的軟件包格式已經(jīng)改變了這一點(diǎn)。Flatpak和Snap軟件包通常也比系統(tǒng)存儲(chǔ)庫(kù)更快地接收更新。但仍然有時(shí)候編譯是獲得所需軟件的唯一途徑。

2.你可以自己選擇功能

FFmpeg的功能 使用源代碼包的另一個(gè)好處是你可以更加掌控你安裝的程序。當(dāng)從二進(jìn)制軟件庫(kù)安裝時(shí),你在自定義軟件包方面受到限制。

以FFmpeg為例,它是一個(gè)基于命令行的音視頻轉(zhuǎn)換工具。默認(rèn)情況下,它帶有大量的功能,其中一些你可能從未使用過(guò)。例如,F(xiàn)Fmpeg支持JACK音頻,盡管這個(gè)軟件通常只在生產(chǎn)環(huán)境中使用。

通過(guò)編譯FFmpeg,你可以移除你不需要的功能,使其更加輕巧并符合你的需求。同樣的原理也適用于其他龐大的程序。

當(dāng)資源有限時(shí),移除功能可以有效減輕負(fù)荷。難怪許多低端計(jì)算機(jī)上都使用基于Gentoo Linux的ChromeOS。Gentoo是基于源代碼的,它編譯了許多軟件,潛在地使這些系統(tǒng)運(yùn)行得更加輕巧。

為什么不同時(shí)使用二進(jìn)制和源代碼包呢?

雖然你可能不會(huì)每天都想編譯軟件包,但這是一種有用的方法。盡管如此,隨著從Snap Store和Flathub等網(wǎng)站提供的新的通用軟件包格式,你更不太可能需要從源代碼構(gòu)建以獲得最新的軟件。

關(guān)鍵詞:

[責(zé)任編輯:]

相關(guān)閱讀