什麼是二進位包?如何建構它們?

什麼是二進位包?如何建構它們?

我想獲取有關二進制包的詳細資訊並在 Linux 上運行它們。我正在運行 Debian 基礎 (Ubuntu/Linux mint) Linux 作業系統。

  1. 如何從原始碼建置二進位包?我可以直接下載應用程式(如firefox等)和遊戲(如boswars等)的二進位套件嗎?
  2. 我運行一些“xyz.linux.run”格式的直接套件這些套件是什麼?它們獨立於依賴關係嗎?或者它是預先構建的二進制包嗎?
  3. 如何透過在linux上直接「xyz.linux.run」來建立可以在linux作業系統上運行的它們。
  4. 二進位包和 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.cgcc建立該二進位檔案並輸出一個寫入「Hello World!」的程序運行時到控制台。

好的,現在您已經建立了一個程序,但是每次需要編譯某些內容時都必須輸入要編譯的每個原始文件,這不是很糟糕嗎?這就是目的makefiles。如果您執行的程式有一堆原始文件,它通常會附帶一個 makefile 或其他一些建置自動化文件(antCmakeautoconf其他文件)。

要建立這些類型的程序,只需make <build target>在目錄內運行即可。我的 hello world 程式的 makefile 可能包含一個名為 的目標,helloworld僅編譯 helloWorld.c。我會運行它make helloworld,它會輸出一個二進位。

請注意,從原始程式碼建立東西可能需要很長的時間和大量的記憶體(Chromium 團隊甚至推薦使用第二個硬碟來建立他們的原始碼!)。另請注意,當您從原始程式碼建立內容時,您將必須處理依賴項,而不是套件管理器為您做這件事

答案3

我認為您正在尋找類似於 OpenSuse Build Service 專案的解決方案:

build.opensuse.org

也支援 Debian、CentOS、Red Hat。

相關內容