Linuxのある「属性」でコンパイルされたLinux実行可能ファイルは、別のLinuxの「属性」で実行できますか?

Linuxのある「属性」でコンパイルされたLinux実行可能ファイルは、別のLinuxの「属性」で実行できますか?

1つのLinuxバージョンでコンパイルされた、小さくて非常に単純なプログラム(下図)の実行可能ファイルを別のバージョンのLinuxで実行できますか?それとも再コンパイルする必要がありますか?

この場合、マシンアーキテクチャは重要ですか?

int main()
{
  return (99);
}

ベストアンサー1

簡単に言うと:コンパイルされたバイナリをあるホストから別のホストに転送するために同じ(または互換性のある)ホストを使用する場合建築学、おそらく全く別の場所に持って行くかもしれません。分配する。ただし、コードが複雑になると、別の場所にインストールされていないか、別のバージョンにインストールされているライブラリにリンクする可能性が高くなります。たとえば、コードはldd(Debianから派生した)Ubuntu Linuxホストでコンパイルすると、次の依存関係が報告されます。gcc -o exit-test exit-test.c

$ ldd exit-test
    linux-gate.so.1 =>  (0xb7748000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb757b000)
    /lib/ld-linux.so.2 (0x8005a000)

このバイナリをMac()に転送すると./exit-test: cannot execute binary file: Exec format error実行されないようです。 RHELボックスに移動しましょう。

$ ./exit-test
-bash: ./exit-test: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

こんな。なぜこれが起こるのですか?

$ ls /lib/ld-l* # reference the `ldd` output above
ls: cannot access /lib/ld-l*: No such file or directory

このユースケースでも、共有ライブラリがないため、 Forklift は失敗します。

gcc -static exit-test-static exit-test.cしかし、ライブラリなしでシステムに移植した場合。もちろん、ディスク容量を犠牲にして:

$ ls -l ./exit-test{,-static}
-rwxr-xr-x  1 username  groupname    7312 Jan 29 14:18 ./exit-test
-rwxr-xr-x  1 username  groupname  728228 Jan 29 14:27 ./exit-test-static

別の考えられる解決策は、新しいホストに必要なライブラリをインストールすることです。

U&Lの世界の多くのように、この猫はいくつかのスキンを持っており、そのうちの2つが上記で説明されています。

おすすめ記事