Como sei se meu sistema Linux pode executar tanto os binários ELF de 32 bits quanto os ELF de 64 bits?

1

Parece que posso executar binários de 32 bits ELF de 32 bits e ELF de 64 bits no meu host Linux. Eu estou executando em caixas Linux muito baunilha (hardware Intel, kernel de 64 bits RedHat, etc.)

  1. Como isso é possível?
  2. Existe um teste para saber que isso é possível em cada instalação do Linux (determinada biblioteca, módulo do kernel, etc.)?

Alguns detalhes úteis:

$ 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

Para mim, parece que estou executando um kernel Linux x86 de 64 bits.

Temos várias versões do Subversion instaladas. Alguns parecem ser de 32 bits e outros de 64 bits. Posso executar pelo menos algumas versões de 32 bits e algumas versões de 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)
    
por kevinarpe 04.02.2014 / 05:36

1 resposta

3

um kernel de 32 bits (x86) só pode executar código de 32 bits. um kernel de 64 bits (x86_64) pode executar códigos de 32 e 64 bits.

Seu nome -a tem x86_64 estampado em toda parte e isso é de 64 bits.

Não há necessidade de testar o código de 32 bits apenas funciona em um kernel de 64 bits.

É possível que determinados programas possam precisar de certos sinalizadores de compilação para fazê-lo funcionar. No entanto, todos os programas modernos têm esses sinalizadores padrão no Makefile.

A única limitação é que os programas de 32 bits ainda não podem acessar mais de 4GB de RAM.

Observação: seu kernel é antigo e você deve atualizá-lo

    
por 04.02.2014 / 05:54