Все вопросы, которые я видел, касаются запуска 32-битного приложения в 64-битной системе.
Я использую 32-битную Ubuntu 12.04 (на самом деле это элементарная ОС Luna, которая основана на ней) и пытаюсь запустить 64-битное приложение, которое отказывается открываться. Бег:
./64bit_app.run
(где 64bit_app.run
находится 64-битное приложение, которое я пытаюсь запустить) результаты:
bash: ./64bit_app.run: no se puede ejecutar el fichero binario
что означает « не удается выполнить / запустить / открыть двоичный файл ».
Должен ли я быть в состоянии запустить его? Можно ли запустить 64-битное приложение в 32-битной системе? Если так, то как?
dpkg --add-architecture
? Насколько я знаю, один и тот же подход должен работать для 32 на 64 и для 64 на 32. Просто изменитеdpkg --add-architecture i386
наdpkg --add-architecture amd64
.sudo dpkg --add-architecture amd64
первую очередь. Это отдельная команда.dpkg: error: opción --add-architecture desconocida
гдеdesconocida
переводится наunknown
.Ответы:
Вы не можете сделать это напрямую в Linux на x86_64 с 32-битным ядром. Вам нужно 64-битное ядро для запуска 64-битного кода. (Примечание: ядро. У вас может быть 32-битное пользовательское пространство, работающее на 64-битном ядре, и установить поддержку для 64-битных двоичных файлов. Насколько это легко, зависит от дистрибутива. Пример здесь для Debian.)
Некоторое программное обеспечение для виртуализации может сделать это (с ограничениями на тип используемого процессора), и эмуляторы могут сделать это тоже. Но для его запуска вам понадобится 64-битное ядро.
Поскольку большинство 64-битных дистрибутивов имеют 32-битную поддержку (по умолчанию или устанавливаемую), это то, что вы должны использовать, если вам нужно запускать как 64-битные, так и 32-битные двоичные файлы в одной и той же ОС.
источник
Расширяя ответ @ Мата:
Да, некоторые программы виртуализации могут это сделать. Основное препятствие, которое необходимо решить, заключается в том, что в 32-разрядной среде 64-разрядные функции ЦП недоступны, а также недоступны функции 64-разрядного ядра. Это даже в том случае, если ваш процессор имеет 64-битную поддержку (примерно с 2003 года все они имеют).
В вашем вопросе неявно говорится, что вы хотите запустить 64-битное приложение в своей системной среде. Если это действительно ваше намерение, это исключает все решения на основе виртуальных машин. Единственное, что мне известно, это эмуляция ядра в qemu. Так:
Он запускает ваше приложение в вашей текущей системе, с вашим текущим ядром, с вашими текущими переменными среды . Конечно, это не очень быстро, оно должно подражать вашему процессору.
Он может эмулировать только приложения Linux x86-64.
источник
Большинство 64-битных архитектур являются расширениями 32-битных. Они более новые и совершенно разные, поэтому, очевидно, что 32-разрядная архитектура не имеет представления о том, что такое 64-разрядный аналог. Они не знают, что представляют собой новые функции, какие существуют новые регистры ... Даже если они знают, у них нет доступа к новым регистрам и функциям. В результате 32-битное ядро не может сохранить 64-битные контексты. Все это делает невозможным запуск 64-битных приложений в 32-битной системе.
Тщательно продуманное 64-битное 32-битное ядро с поддержкой 64-битных приложений может запускать 64-битные приложения, но для сохранения контекста ему все еще требуется некоторый 64-битный код, что делает его уже не чистым 32-битным ядром.
Вы можете запустить 64-разрядную ОС внутри эмулятора или 64-разрядную гостевую виртуальную машину внутри 32-разрядного хоста с VT-x. Но технически вы работаете в другой 64-битной системе. Все еще невозможно запустить 64-битный код напрямую в 32-битном ядре Linux
источник