Comment savoir si mon système Linux peut exécuter des fichiers binaires ELF 32 bits et ELF 64 bits?

2

Il semble que je puisse exécuter les binaires ELF 32 bits et ELF 64 bits sur mon hôte Linux. Je tourne sur de jolies machines Linux vanille (matériel Intel, noyau RedHat 64 bits, etc.)

  1. Comment est-ce possible?
  2. Existe-t-il un test pour savoir si cela est possible sur chaque installation Linux (certaine bibliothèque, module de noyau, etc.)?

Quelques détails utiles:

$ 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

Pour moi, cela ressemble à un noyau Linux x86 64 bits.

Nous avons plusieurs versions de Subversion installées. Certains semblent être 32 bits et d'autres 64 bits. Je peux exécuter au moins certaines versions 32 bits et certaines versions 64 bits.

$ 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)
kevinarpe
la source

Réponses:

3

un noyau 32 bits (x86) ne peut exécuter que du code 32 bits. un noyau 64 bits (x86_64) peut exécuter du code 32 et 64 bits.

Votre uname -a est recouvert de x86_64 et correspond à 64 bits.

Il n'est pas nécessaire de tester du code 32 bits qui fonctionne simplement sur un noyau 64 bits.

Il est possible que certains programmes aient besoin de certains indicateurs de compilation pour le faire fonctionner. Cependant, tous les programmes modernes ont ces drapeaux standard dans le Makefile.

La seule limitation est que les programmes 32 bits ne peuvent toujours pas accéder à plus de 4 Go de RAM.

Note: Votre noyau est ancien et vous devriez le mettre à jour

cybernard
la source
Le code 32 bits en cours d’exécution requiert-il toujours l’installation de bibliothèques 32 bits? J'avais une instance d'Ubuntu Server x64 (je ne me souviens plus de la version) en cours d'exécution et je devais télécharger les bibliothèques 32 bits. Tout existait en double.
Fiasco Labs
Habituellement, une application 32 bits nécessite des bibliothèques 32 bits. Dans de nombreux cas, les bibliothèques 64 bits sont optimisées pour tirer parti des programmes 64 bits et les programmes 32 bits peuvent poser problème. Par exemple, si un programme 32 bits recevait une adresse mémoire de 64 bits, il ne pourrait pas le gérer.
Cybernard