1

Похоже, что я могу запускать как ELF 32-битные, так и ELF 64-битные двоичные файлы на моем хосте Linux. Я работаю на довольно ванильных Linux-блоках (аппаратное обеспечение Intel, 64-битное ядро RedHat и т.д.)

  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-битное ядро Linux x86.

У нас установлено несколько версий 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)

1 ответ1

3

32-битное ядро (x86) может выполнять только 32-битный код. 64-битное ядро (x86_64) может выполнять как 32-битный, так и 64-битный код.

Ваш uname -a покрыл x86_64, и это 64 бит.

Нет необходимости тестировать 32-битный код, он работает только на 64-битном ядре.

Возможно, что некоторым программам могут понадобиться определенные флаги компиляции, чтобы это работало. Тем не менее, все современные программы имеют эти флаги в Makefile.

Единственное ограничение - 32-битные программы по-прежнему не могут получить доступ к более чем 4 ГБ ОЗУ.

Примечание: ваше ядро древнее, и вы должны обновить его

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .