2010-01-08 171 views
20

任何方式在Linux發行版中創建二進制文件並在具有相同體系結構的另一個發行版上運行它?或者我應該在不同的發行版上編譯和構建它?Linux發行版二進制兼容性

Redhat,基於Debian的二進制文件發行版有任何兼容性嗎? (我想在Fedora上使用我的Ubuntu二進制文件!)

+7

有這麼多的變量,這樣簡單的答案是:這取決於。這些圖書館彌補了這一差異。 – jldupont 2010-01-08 13:20:19

回答

17

輸入Linux標準庫,以減少個人的Linux發行版之間的差異。 見

+2

[Linux AppChecker](http://ldn.linuxfoundation.org/lsb/check-your-app)工具基於** LSB **,可以檢查您的應用程序是否與許多Linux發行版(如RedHat,Debian,SUSE)兼容和別的。 – aponomarenko 2011-10-20 19:59:57

+0

@aponomarenko,斷開的鏈接。 – 2014-01-14 12:25:29

+2

@techtonik,替代鏈接是http://www.linuxfoundation.org/collaborate/workgroups/lsb/all-about-linux-application-checker – aponomarenko 2014-01-14 19:47:28

2

通常,只要您擁有相同的可用庫集合,就可以跨Linux發行版使用二進制文件。您可以使用'ldd'來檢查二進制文件需要哪些庫。 libc應該確保在涉及的發行版中具有相同的版本。

3

它的工作原理。但是它也取決於你使用的共享庫的版本,包括libc,libstdC++,它們的編譯器版本是,被迫爲,這可能與發行版到發行版不同。

2

您可以靜態鏈接您的可執行文件以實現便攜性。

+3

不,他不能。什麼時候人們得到​​它,不再支持靜態鏈接的可執行文件。閱讀LSB。 – Lothar 2010-08-30 23:57:33

10

靜態鏈接你的二進制文件使得它們很容易移植,因爲有些庫不能正確地爲那臺機器工作(不同的認證方法等)。

如果您靜態鏈接任何「異常」庫並將您的受支持發行版集保持在最低限度,則應該沒問題。

不要靜態鏈接的C庫(或整個二進制),這是自找麻煩:)

看什麼(例如)谷歌Chrome瀏覽器做一個配方。

+0

嗯,這不完全正確,取決於程序。我已經成功交付了多次靜態鏈接的二進制文件。想想一個編譯器:它讀取一個文件並且寫入一個文件。是什麼讓你認爲這不能被靜態鏈接? – 2010-01-08 14:44:15

+0

您可以靜態鏈接您的二進制文件,但它們無法從C庫的更新中受益,也不能與發行版或最終用戶管理員可能做出的其他更改相兼容,例如,自定義nss庫。 – MarkR 2010-01-08 22:03:00

6

您的應用程序使用哪種語言編碼?如果它的語言如Python,(無C綁定)或Java或任何其他基於VM的語言,那麼我認爲您可以信任VM以確保您的應用程序可以在不同的Linux發行版上運行。

另外,還有你可以參考的Linux Standard Base

心連心,阿米特

4

,最好的辦法是分發的源代碼,並可以很容易地建立在任何合理的Linux發行版的源。這比二進制分發要好,因爲它不足以使二進制文件與共享庫兼容。您還需要確保將程序調整爲適用於分發指定位置和約定的內容,例如Web應用的發佈位置,發送電子郵件的方式,如何啓動服務,如何確定默認紙張大小或無數次的其他細節。

例如,請參閱Debian Policy Manual,該文檔描述了分發需要決定的許多事情以確保在其上運行的應用程序之間的兼容性。你不需要閱讀或者理解它,但它顯示了可能會讓你感到不安的問題的範圍。

您應該與幾個主要的發行版一起工作,以確保您的應用程序與所有主要發行版一起運行良好。如果你禮貌地接近他們,大多數發行版的開發者都會很高興地提供幫助。如果幸運的話,您可以吸引發行商的志願者爲您製作二進制包裝,這將很快爲您提供有關在源代碼級需要更改的反饋,以便您的應用程序易於打包。

其他人已經提到的Linux Standard Base試圖找出這些變量的交叉分配解決方案,但它並不全面,大多數分佈都沒有完全支持。然而,如果不小心破壞了LSB兼容性,大多數發行版都認爲這是一個問題。

5

我意識到這是一個非常古老的問題,這個詳細的治療最滿意的,但它在搜索結果和這樣高的出現尚未提及:

CDE is a tool to create portable Linux applications。該工具通過在運行時分析將所有需要的文件(包括庫)打包在一起。我多次在命令行工具上成功使用過它,其中一個例子是讓tcpdump在運行自定義分發的舊硬件設備上運行。 CDE也不需要源代碼,它只是打包一個可以運行的可執行文件。

在一個點上,我運行cde命令時出錯,這個命令通過將命令與LD_ASSUME_KERNEL=2.4.1相加來解決,這在最近的版本中可能沒有必要,因爲它已經有幾年了。

代碼也是在GitHub上:https://github.com/pgbovine/CDE