我想獲取有關二進制包的詳細資訊並在 Linux 上運行它們。我正在運行 Debian 基礎 (Ubuntu/Linux mint) Linux 作業系統。
- 如何從原始碼建置二進位包?我可以直接下載應用程式(如firefox等)和遊戲(如boswars等)的二進位套件嗎?
- 我運行一些“xyz.linux.run”格式的直接套件這些套件是什麼?它們獨立於依賴關係嗎?或者它是預先構建的二進制包嗎?
- 如何透過在linux上直接「xyz.linux.run」來建立可以在linux作業系統上運行的它們。
- 二進位包和 deb 包有什麼區別?
答案1
從嚴格意義上講,二進位檔案是一種未將字元編碼為人類可讀文字的檔案。更通俗地說,「二進位」是指經過編譯的可執行程式碼文件,儘管文件本身可能不是可執行的(與其說是指權限,不如說是指單獨運行的能力;一些二進位程式碼文件,例如庫)已編譯,但無論權限如何,都不能自行執行)。作為獨立可執行檔運行的二進位檔案是“可執行檔”,儘管並非所有可執行檔都是二進位檔案(這與權限有關:透過 shebang 呼叫解釋器的可執行文字檔案也是#!/bin/sh
可執行檔)。
什麼是二進位包?
Linux 上下文中的二進位套件是包含(預先建置的)可執行檔(而不是原始程式碼)的應用程式套件。
請注意,這並不意味著包文件本身就是可執行檔。包文件是包含其他文件的存檔(有點像.zip
),而“二進制”包文件是專門包含可執行文件的文件(儘管同樣,可執行文件不一定是真正的二進製文件,實際上二進制包可用於已編譯的庫是二進位程式碼,但不是可執行檔)。但是,必須解壓縮該包才能存取這些檔案。
通常,這是由套件管理系統(例如 apt/dpkg)為您處理的,它會下載套件並解壓縮並安裝其中的二進位檔案。
二進位包和 deb 包有什麼區別?
沒有——.deb
包是二進制包,儘管有些.deb
包包含原始碼,但它們通常附加-src
到它們的名稱後面。
我運行一些“xyz.linux.run”格式的直接套件這些套件是什麼?
這些通常是自解壓縮的二進位包;它們的工作原理是將二進位負載嵌入到 shell 腳本中。 「自解壓縮」意味著您不必呼叫另一個應用程式(例如套件管理器)來解壓縮和使用它們。但是,由於它們不與套件管理器一起使用,因此解決它們的依賴關係可能會更加困難,因此一些此類套件使用靜態連結可執行檔(它們內建了所有必要的庫),在使用它們時會浪費一些記憶體。
答案2
既然你的問題的其餘部分已經得到了金髮女孩的回答,我將權衡第一部分,即如何從源頭建立東西。
真正簡短的版本是,當您從互聯網下載原始文件時,它們通常會有一個與之關聯的自述文件,它應該準確地告訴您如何啟動和運行程式。
但是告訴您閱讀自述文件並不能真正回答問題,因此從基本意義上講,您可以編寫一個非常基本的程序,即
#include <stdio.h>
int main( ) {
printf("Hello World!");
}
輸入gcc helloWorld.c
並gcc
建立該二進位檔案並輸出一個寫入「Hello World!」的程序運行時到控制台。
好的,現在您已經建立了一個程序,但是每次需要編譯某些內容時都必須輸入要編譯的每個原始文件,這不是很糟糕嗎?這就是目的makefiles
。如果您執行的程式有一堆原始文件,它通常會附帶一個 makefile 或其他一些建置自動化文件(ant
、Cmake
或autoconf
其他文件)。
要建立這些類型的程序,只需make <build target>
在目錄內運行即可。我的 hello world 程式的 makefile 可能包含一個名為 的目標,helloworld
僅編譯 helloWorld.c。我會運行它make helloworld
,它會輸出一個二進位。
請注意,從原始程式碼建立東西可能需要很長的時間和大量的記憶體(Chromium 團隊甚至推薦使用第二個硬碟來建立他們的原始碼!)。另請注意,當您從原始程式碼建立內容時,您將必須處理依賴項,而不是套件管理器為您做這件事
答案3
我認為您正在尋找類似於 OpenSuse Build Service 專案的解決方案:
build.opensuse.org
也支援 Debian、CentOS、Red Hat。