2016-07-18 2 views
0

私はいつも、異なる理由(共有ライブラリなど)で実行できるように、Linuxマシンのバイナリをローカルマシンでコンパイルする必要があると考えてきました。 しかし、再コンパイルする必要なく、複数のLinuxディストリビューションにまたがるものがあるようです。なぜいくつかのLinuxバイナリを再コンパイルする必要がありますか?

例:hashcat。彼らは32ビットと64ビットのバイナリを作成しましたが、どちらもあらかじめコンパイルされています。

これはどのように可能ですか、どのような状況で一般的に可能ですか?

**私はLinuxの世界について話しています。

+1

この点でLunuxが他のOSと根本的に異なると思われるのはなぜですか? (そうではありません)。 –

+0

@ n.m .: Linuxは強力なオープンソースの考え方を持っているため、バイナリ互換性は当然受け止められていませんが、ソースコードの可用性は高いです。 Windowsでは、それは他の方法とほぼ同じです。 – MSalters

+0

@MSaltersの考え方は、技術が全く別のものです。どのような技術的な違いがありますか? –

答えて

1

バイナリを構築するにはさまざまな方法があります。 1つの方法は "静的"です。つまり、実行可能ファイル自体にすべての必要なライブラリが含まれているため、外部の依存関係は存在しません。しかし、ビルド時には、実行時にどのライブラリが含まれ、どのライブラリが検索されるのかを自分で決めることができます。したがって、バイナリには非常に固有のライブラリをいくつか含めることができますが、システム上に既に存在するためには、いくつかの標準ライブラリに頼っています。

それに加えて、ほとんどのライブラリは、固定されたインターフェイスを提供します。固定されたインターフェイスは、時間の経過とともにほぼ同じ状態を保ちます。そうすれば、あなたのシステムにどのような正確なバージョンがあるのか​​、どのように正確にコンパイルされたのかはまったく問題になりません。実行可能ファイルが存在すると予想される関数が存在する限り(同じ "動作"を提供する)限り、すべて正常に動作します。

関連する問題