GNU/Linux >> Linux の 問題 >  >> Linux

ディストリビューション間で実行可能なバイナリ ファイルに違いはありますか?

すべての Linux ポート (つまり、異なるプロセッサ上の Linux カーネル) は、実行可能ファイルとライブラリのファイル形式として ELF を使用します。特定の ELF バイナリは、それを実行できる単一のアーキテクチャ/OS でラベル付けされています (ただし、一部の OS は、他の OS から ELF バイナリを実行する互換性があります)。

ほとんどのポートは古い a.out フォーマットをサポートしています。 (一部のプロセッサは十分に新しいため、それらの a.out 実行可能ファイルは存在しません。)

一部のポートは、他の実行可能ファイル形式もサポートしています。たとえば、PA-RISC ポートは HP-UX の古い SOM 実行可能ファイルをサポートしており、μcLinux (nonmmu) ポートは独自の FLAT フォーマットをサポートしています。

Linux にも binfmt_misc があります 、これにより、ユーザー空間は任意のバイナリ形式のハンドラーを登録できます。一部のディストリビューションは、これを利用して Windows、.NET、または Java アプリケーションを実行できるようにしています。実際にはまだインタープリターを起動していますが、ユーザーには完全に透過的です。

Linux on Alpha は、em86 経由で実行される Intel バイナリのロードをサポートしています。 エミュレータです。

binfmt_misc 登録可能 他のアーキテクチャの実行可能ファイルの場合、qemu-user で実行します。

理論的には、ファット バイナリ用に新しいフォーマットを作成することもできます。おそらく ELF に新しい「アーキテクチャ」を登録することもできます。次に、カーネル binfmt ローダーはこの新しい形式について教えられる必要があり、ld-linux.so を見逃すことはできません。 動的リンカーとビルド ツールチェーン全体。このような機能にはほとんど関心がなく、私の知る限り、そのような機能に取り組んでいる人は誰もいません.


すべての Linux ディストリビューションは同じバイナリ形式の ELF を使用しますが、いくつかの違いがあります:

<オール>
  • CPU アーキテクチャが異なると、異なる命令セットが使用されます。
  • 同じ CPU アーキテクチャが異なる ABI を使用する場合があります。ABI は、レジスタ ファイルの使用方法、ルーチンの呼び出し/戻り方法を定義します。異なる ABI は連携できません。
  • 同じアーキテクチャ、同じ ABI であっても、ディストリビューション内の 1 つのバイナリ ファイルを別のバイナリ ファイルにコピーできるわけではありません。ほとんどのバイナリ ファイルは静的にリンクされていないため、ディストリビューションの下のライブラリに依存します。つまり、ディストリビューションが異なれば、ライブラリの異なるバージョンまたは異なるコンパイル構成が使用される可能性があります。
  • そのため、プログラムをすべてのディストリビューションで実行したい場合は、カーネルの syscall のみに依存するバージョンを静的にリンクする必要がある場合があります。これでも、指定されたアーキテクチャしか実行できません。

    本当に任意のアーチでプログラムを実行したい場合は、すべてのアーチのバイナリをコンパイルし、シェル スクリプトを使用して適切なアーチを起動する必要があります。


    ほぼすべての Linux プログラム ファイルが ELF 標準を使用しています。


    Linux
    1. [[$ a ==Z*]]と[$a==Z *]の違いは?

    2. 〜/ .profile、〜/ .bashrc、〜/ .bash_profile、〜/ .gnomerc、/ etc / bash_bashrc、/ etc / screenrcの違い…?

    3. Linuxで2つのファイルの違い(追加のみ)を取得する方法

    1. テスト コマンドの前と後のネゲートに違いはありますか?

    2. WSL で perf を実行する方法はありますか?

    3. Mac アプリケーションを実行するためのワインに相当するものはありますか?

    1. 同じコンピュータ上の 2 つの異なる OS 間でファイルを共有することはできますか?

    2. /tmp と /run の違いは何ですか?

    3. デバイスにスペースが残っていない他の理由はありますか?