Как я могу узнать, может ли моя система Linux работать как с 32-битными, так и с ELF 64-битными двоичными файлами?
Похоже, что я могу запускать как 32-разрядные, так и 64-разрядные двоичные файлы ELF на своем хосте Linux. Я работаю на довольно ванильных Linux-блоках (аппаратное обеспечение Intel, 64-битное ядро RedHat и т. Д.)
- Как это возможно?
- Есть ли тест, чтобы узнать, что это возможно на каждой установке 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 ответ
32-битное ядро (x86) может выполнять только 32-битный код. 64-битное ядро (x86_64) может выполнять как 32-битный, так и 64-битный код.
Ваш uname -a покрыл x86_64 по всему, и это 64 бит.
Нет необходимости тестировать 32-битный код, он работает только на 64-битном ядре.
Возможно, что некоторым программам могут понадобиться определенные флаги компиляции, чтобы это работало. Тем не менее, все современные программы имеют эти флаги стандартными в Makefile.
Единственное ограничение - 32-битные программы по-прежнему не могут получить доступ к более чем 4 ГБ ОЗУ.
Примечание: ваше ядро древнее, и вы должны обновить его