web-dev-qa-db-ja.com

Linuxディストリビューションのバイナリ互換性

Linuxディストリビューションでバイナリを作成し、同じアーキテクチャの別のディストリビューションで実行する方法はありますか?または、別のディストリビューションでコンパイルしてビルドする必要がありますか?

バイナリファイル用のRedhat、Debianベースのディストリビューション間に互換性はありますか? (FedoraでUbuntuバイナリファイルを使用したい!)

24
Hosi

Linux Standard Baseと入力して、個々のLinuxディストリビューション間の違いを減らします。見る

19

バイナリを静的にリンクすると、一部のライブラリがそのマシンで正しく機能しないため(認証方法の違いなど)、バイナリの移植性が低下します。

「異常な」ライブラリを静的にリンクし、サポートされているディストリビューションのセットを最小限に抑えれば、問題はありません。

Cライブラリ(またはバイナリ全体)を静的にリンクしないでください。これは問題のレシピです:)

(例)GoogleがChromeで何をしているのか見てみましょう。

10
MarkR

アプリケーションはどの言語でコーディングされていますか? Pythonのような言語(Cバインディングなし)、Java、またはその他のVMベースの言語の場合、VMを信頼できると思います。アプリケーションがさまざまなLinuxディストリビューションで動作することを確認してください。

また、参照できる Linux Standard Base もあります。

HTH、アミット

6
user59634

これは非常に古い質問だと思いますが、検索結果の上位に表示され、言及されていません。

CDEはポータブルLinuxアプリケーションを作成するためのツールです 。このツールは、実行時に分析することにより、必要なすべてのファイル(ライブラリを含む)をパッケージ化します。私はこれをコマンドラインツールで数回正常に使用しました。その一例は、カスタムディストリビューションを実行している古いハードウェアアプライアンスでtcpdumpを実行することです。 CDEもソースを必要とせず、実行可能な実行可能ファイルをパッケージ化するだけです。

ある時点で、コマンドの前にLD_ASSUME_KERNEL=2.4.1を付けることで修正された、cdeコマンドの実行中にエラーが発生しました。これは、数年前の最近のバージョンでは必要ない場合があります。

コードはGitHubにもあります: https://github.com/pgbovine/CDE

5
henningda

最良の方法は、ソースコードを配布し、妥当なLinuxディストリビューションでソースを簡単に構築できるようにすることです。バイナリを共有ライブラリと互換性を持たせるには十分ではないため、これはバイナリ配布よりも優れています。また、Webアプリの送信先、電子メールの送信方法、サービスの開始方法、デフォルトの用紙サイズの決定方法、または無数の配布指定の場所や規則などにプログラムを適合させる必要があります。その他の詳細の。

ディストリビューションで実行されているアプリケーション間の互換性を確保するためにディストリビューションが決定する必要のある多くのことを説明するドキュメントについては、たとえば Debianポリシーマニュアル を参照してください。あなたはそれを読んだり、暗記したりする必要はありませんが、それはあなたをつまずかせるかもしれない問題の範囲を示しています。

アプリケーションがそれらすべてでうまく機能することを保証するために、おそらくいくつかの主要なディストリビューションと協力する必要があります。ほとんどのディストリビューションの開発者は、丁寧にアプローチすれば喜んで助けてくれます。運が良ければ、ディストリビューションからボランティアを集めてバイナリパッケージを作成できます。これにより、アプリケーションを簡単にパッケージ化するためにソースレベルで何を変更する必要があるかについてのフィードバックがすぐに得られます。

Linux Standard Base すでに他の人が言及しているように、これらの変数に対するクロスディストリビューションソリューションを考え出そうとしますが、包括的ではなく、ほとんどのディストリビューションで完全にはサポートされていません。ただし、ほとんどのディストリビューションでは、誤ってLSBの互換性が失われた場合に問題と見なされます。

4
user25148

できます。ただし、使用する共有ライブラリのバージョンにも依存します。これには、libc、libstdc ++が含まれます。これらは、ディストリビューションごとに異なる可能性のあるコンパイラバージョンによって強制です。

4
Didier Trosset

移植性のために実行可能ファイルを静的にリンクすることができます。

2

通常、同じライブラリセットが利用可能である限り、Linuxディストリビューション全体でバイナリを使用しても問題ありません。 'ldd'を使用して、バイナリに必要なライブラリを確認できます。 libcは、関係するディストリビューションで同じバージョンを持っている必要があります。

2
user231967

LSBは間違いなくチェックする価値があります。ライブラリの操作に関しては、この回答に最も満足しましたSO https://stackoverflow.com/questions/1209674/shipping-closed-source-application- for-linux/1242738#1242738 そしてrpathメカニズムのこの詳細な取り扱い http://www.eyrie.org/~eagle/notes/rpath.html

0
user7610