Запустить 64-битное приложение в 32-битной системе Ubuntu


10

Все вопросы, которые я видел, касаются запуска 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.
Terdon

1
вы делаете 64-разрядное аппаратное обеспечение, не так ли? (просто чтобы убедиться)
Струге

"который отказывается открывать"? как именно?
Брайам

1
Пожалуйста, прочитайте ответы на вопрос, который я связал , вам нужно запустить в sudo dpkg --add-architecture amd64первую очередь. Это отдельная команда.
Тердон

1
@terdon извини, я этого не понял. Выполнение этой строки приводит к: dpkg: error: opción --add-architecture desconocidaгде desconocidaпереводится на unknown.
Габриэль

Ответы:


8

Вы не можете сделать это напрямую в Linux на x86_64 с 32-битным ядром. Вам нужно 64-битное ядро ​​для запуска 64-битного кода. (Примечание: ядро. У вас может быть 32-битное пользовательское пространство, работающее на 64-битном ядре, и установить поддержку для 64-битных двоичных файлов. Насколько это легко, зависит от дистрибутива. Пример здесь для Debian.)

Некоторое программное обеспечение для виртуализации может сделать это (с ограничениями на тип используемого процессора), и эмуляторы могут сделать это тоже. Но для его запуска вам понадобится 64-битное ядро.

Поскольку большинство 64-битных дистрибутивов имеют 32-битную поддержку (по умолчанию или устанавливаемую), это то, что вы должны использовать, если вам нужно запускать как 64-битные, так и 32-битные двоичные файлы в одной и той же ОС.


7

Расширяя ответ @ Мата:

Да, некоторые программы виртуализации могут это сделать. Основное препятствие, которое необходимо решить, заключается в том, что в 32-разрядной среде 64-разрядные функции ЦП недоступны, а также недоступны функции 64-разрядного ядра. Это даже в том случае, если ваш процессор имеет 64-битную поддержку (примерно с 2003 года все они имеют).

В вашем вопросе неявно говорится, что вы хотите запустить 64-битное приложение в своей системной среде. Если это действительно ваше намерение, это исключает все решения на основе виртуальных машин. Единственное, что мне известно, это эмуляция ядра в qemu. Так:

qemu-x86_64 ./your_64bit_app

Он запускает ваше приложение в вашей текущей системе, с вашим текущим ядром, с вашими текущими переменными среды . Конечно, это не очень быстро, оно должно подражать вашему процессору.

Он может эмулировать только приложения Linux x86-64.


Где-то я тоже читал, как если бы vmware мог это сделать, но этой информации недостаточно для ответа. Afaik последние vmware 64-битные только на стороне хоста.
Петер - Восстановить Монику

1

Большинство 64-битных архитектур являются расширениями 32-битных. Они более новые и совершенно разные, поэтому, очевидно, что 32-разрядная архитектура не имеет представления о том, что такое 64-разрядный аналог. Они не знают, что представляют собой новые функции, какие существуют новые регистры ... Даже если они знают, у них нет доступа к новым регистрам и функциям. В результате 32-битное ядро ​​не может сохранить 64-битные контексты. Все это делает невозможным запуск 64-битных приложений в 32-битной системе.

Тщательно продуманное 64-битное 32-битное ядро ​​с поддержкой 64-битных приложений может запускать 64-битные приложения, но для сохранения контекста ему все еще требуется некоторый 64-битный код, что делает его уже не чистым 32-битным ядром.

Вы можете запустить 64-разрядную ОС внутри эмулятора или 64-разрядную гостевую виртуальную машину внутри 32-разрядного хоста с VT-x. Но технически вы работаете в другой 64-битной системе. Все еще невозможно запустить 64-битный код напрямую в 32-битном ядре Linux

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.