web-dev-qa-db-ja.com

LinuxシステムがELF32ビットとELF64ビットの両方のバイナリを実行できるかどうかはどうすればわかりますか?

LinuxホストでELF32ビットとELF64ビットの両方のバイナリを実行できるようです。私はかなりのVanillaLinuxボックス(Intelハードウェア、RedHat 64ビットカーネルなど)で実行しています。

  1. そんなことがあるものか?
  2. これが各Linuxインストール(特定のライブラリ、カーネルモジュールなど)で可能であることを知るためのテストはありますか?

いくつかの役立つ詳細:

$ uname -a
Linux xhkg6002dap 2.6.18-348.4.1.el5 #1 SMP Fri Mar 22 05:41:51 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux

私には、64ビットのx86Linuxカーネルを実行しているように見えます。

Subversionにはいくつかのバージョンがインストールされています。 32ビットのものと64ビットのものがあります。少なくともいくつかの32ビットバージョンといくつかの64ビットバージョンを実行できます。

$ for file in $(find /sbcimp/run/pd/Subversion -path '*/bin/svn') ; do echo $file ; file $file ; $file --version 2>&1 | head -n 1 ; done
/sbcimp/run/pd/Subversion/1.5.3/bin/svn
/sbcimp/run/pd/Subversion/1.5.3/bin/svn: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
svn, version 1.5.3 (r33570)
/sbcimp/run/pd/Subversion/64-bit/1.5.3/bin/svn
/sbcimp/run/pd/Subversion/64-bit/1.5.3/bin/svn: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
svn, version 1.5.3 (r33570)
/sbcimp/run/pd/Subversion/64-bit/1.5.4/bin/svn
/sbcimp/run/pd/Subversion/64-bit/1.5.4/bin/svn: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
svn, version 1.5.4 (r33841)
/sbcimp/run/pd/Subversion/64-bit/1.6.2/bin/svn
/sbcimp/run/pd/Subversion/64-bit/1.6.2/bin/svn: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
/sbcimp/run/pd/Subversion/64-bit/1.6.2/bin/svn: error while loading shared libraries: libssl.so.0.9.8: cannot open shared object file: No such file or directory
/sbcimp/run/pd/Subversion/64-bit/1.6.6/bin/svn
/sbcimp/run/pd/Subversion/64-bit/1.6.6/bin/svn: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
/sbcimp/run/pd/Subversion/64-bit/1.6.6/bin/svn: error while loading shared libraries: libssl.so.0.9.8: cannot open shared object file: No such file or directory
/sbcimp/run/pd/Subversion/1.5.4/bin/svn
/sbcimp/run/pd/Subversion/1.5.4/bin/svn: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
svn, version 1.5.4 (r33841)
/sbcimp/run/pd/Subversion/1.6.2/bin/svn
/sbcimp/run/pd/Subversion/1.6.2/bin/svn: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
svn, version 1.6.2 (r37639)
/sbcimp/run/pd/Subversion/1.6.6/bin/svn
/sbcimp/run/pd/Subversion/1.6.6/bin/svn: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
svn, version 1.6.6 (r40053)
2
kevinarpe

32ビットカーネル(x86)は、32ビットコードのみを実行できます。 64ビットカーネル(x86_64)は、32ビットコードと64ビットコードの両方を実行できます。

あなたのuname-aにはx86_64が塗りつぶされており、それは64ビットです。

32ビットコードをテストする必要はなく、64ビットカーネルで動作します。

特定のプログラムがそれを機能させるために特定のコンパイルフラグを必要とする可能性があります。ただし、最近のすべてのプログラムには、Makefileに標準のこれらのフラグがあります。

唯一の制限は、32ビットプログラムが4GBを超えるRAMにアクセスできないことです。

注:カーネルは古く、アップグレードする必要があります

3
cybernard