異なるLinuxディストリビューションのパッケージ間でバイナリの非互換性が発生するのはなぜですか? [コピー]

異なるLinuxディストリビューションのパッケージ間でバイナリの非互換性が発生するのはなぜですか? [コピー]

これLinux標準ライブラリこのプロジェクトは、さまざまなLinuxディストリビューション間のバイナリ互換性を作成することに専念しています。しかし、なぜこれが必要ですか?つまり、パッケージのソースコードはすべてのディストリビューションで動作しますが、一度コンパイルされると、そのディストリビューション以外のディストリビューションでは機能しなくなります。私はLinuxカーネルがモノリシックであり、ディストリビューション間で変更されないと思います。カーネルバイナリフックがディストリビューションによって異なるのはなぜですか?

ベストアンサー1

この問題についてさらに研究を行った後、バイナリが別のディストリビューション(同じハードウェアを使用)で実行されない場合は、基本的に2つの理由があり、両方が共有ライブラリに関連していることがわかりました。他の同様の質問には、これを明示的に明示していないやや鈍感な答えがあるので、ここに簡単な答えを投稿しています。

(1)最初の問題は、共有ライブラリが他のディストリビューションの異なる場所にある可能性があることです。アプリケーションは常にLD_LIBRARY_PATHでライブラリを見つける必要があるため、これは重要ではありません。ただし、誤って作成されたアプリケーションによっては、LD_LIBRARY_PATHを使用せずにハードコードされたライブラリパスを使用してリリースレベルの非互換性を引き起こします。

(2)2番目の問題は、共有ライブラリが展開ごとに異なる可能性があることです。通常、比較的曖昧または高度な機能のみが異なりますが、アプリケーションで使用されるAPI呼び出しが何らかの理由であるディストリビューションの.soにはありますが、他のディストリビューションの.soにはない場合は非互換性が発生します。 PCの「DLL地獄」にやや似ています。

おすすめ記事