
例如,如果我在運行 Ubuntu 的機器上編譯了一個使用 GTK 3 的簡單 C 程序,我是否能夠在其他 Linux 版本上運行它?
注意:我的實際問題是“我應該為 Linux 或 Ubuntu 標記我編譯的程式嗎?”
例如。我應該將我的下載頁面標記為
Windows
program.exe
Linux
program
Macintosh
program.app
或者
Windows
program.exe
Ubuntu < Version 17.04
program
Macintosh
program.app
答案1
Linux 可執行檔並非特定於 Linux 發行版。但它們特定於處理器架構和一組庫版本。
執行檔任何作業系統特定於處理器架構。 Windows 和 Mac 用戶不太關心,因為這些作業系統或多或少只在單一架構上運作。 (OSX 過去在多個處理器架構上運行,OSX 應用程式通常作為包含所有支援的處理器架構的程式碼的捆綁包進行分發,但現代OSX 僅在amd64 處理器上運行。Windows 在32 位元和64 位元Intel 處理器上運行,因此您可能會找到「32 位元」和「64 位元」Windows 執行檔。
Windows 透過強製程式設計師將他們使用的所有函式庫與其程式捆綁在一起來解決函式庫相依性問題。在 Linux 上,這樣做並不常見,好處是程式設計師不需要捆綁庫,並且用戶可以及時獲得庫的安全性更新和錯誤修復,但代價是程式需要針對不同版本的發行版進行不同的編譯。
因此,您應該將二進位檔案標記為「Linux,64 位元 PC (amd64),為 Ubuntu 17.04 編譯」(如果這是 32 位元可執行文件,則為「32 位元 PC (i386)」),並提供詳細信息所需的庫。您可以使用下列指令查看可執行檔使用的函式庫ldd
: run ldd program
。前面的部分=>
是重要的,例如libgtk-3.so.0
主要的 GTK3 庫,版本為 0(如果曾經有版本 1,它將與版本 0 不相容,這就是更改版本號的原因)。其中一些庫是每個人都會擁有的東西,因為它們已經很多年沒有改變了;只有透過查看多個發行版和多個版本的經驗或比較才能告訴您這一點。如果其他發行版的使用者俱有相容版本的庫,則可以運行相同的二進位。