Я разрабатываю 64-битное приложение. Возможно ли запустить 64-битное приложение на 32-битной ОС?

Я разрабатываю 64-битное приложение. Возможно ли запустить 64-битное приложение на 32-битной ОС?

обратите внимание, что вопрос является общим и не относится к ОС Windows. Infact приложение само по себе является портативным через ОС.

9 ответов


(мы предполагаем, что вы говорите об AMD64 (==EM64T ==x86_64 с) и x86 для 64-разрядных и 32-разрядных соответственно)

вы можете запускать код AMD64 на процессорах x86 только путем эмуляции (например,в QEMU) или некоторые виды виртуализации (я считаю, что VMWare может поддерживать 64-битную гостевую ОС на 32-битной хост-ОС на 64 бит, способный CPU). Однако это означает запуск 64-битной ОС в качестве гостя при эмуляции или виртуализации, я считаю.

Как вы развиваете приложение, не должно быть слишком сложно разработать как 32-разрядные, так и 64-разрядные сборки вашего кода.

для Mac вы можете отправить один двоичный файл, в котором есть оба типа кода, или Mac OSX может запустить 64-разрядный двоичный файл на 32-разрядном ядре (только на процессоре с поддержкой x86_64). Для Windows и Linux вам придется либо отправлять отдельные установщики, либо отправлять смарт-установщик, который выбирает правильные двоичные файлы во время установки. Для Linux есть проект для добавления возможности запуска AMD64 код на ядре x86 на процессоре AMD64 -http://linuxpae64.sourceforge.net/ - но не похоже, что он попал очень далеко в ядро основной линии.

есть ли конкретная причина, по которой вы хотите создавать только 64-битные двоичные файлы?
Если это доступ к дополнительной памяти, то 32-разрядная ОС все равно не сможет предоставить вам дополнительную память.
Если это позволит избежать тестирования 2 разных версий, то просто создайте 32-разрядную версию, она будет работать на Windows AMD64, и большинство Дистрибутивы Linux AMD64 без проблем.


в windows, только с помощью виртуальная машина.

на OS X 64-битные приложения запускаются изначально (спасибо Стивену)


другой способ в порядке, бит я не думаю, что вы можете запустить 64-битное приложение на 32-битной ОС, вы можете использовать виртуальную машину или какую-то виртуализацию.


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

когда вы сказали, что он переносится через разные ОС, вы также имели в виду не 64-битные ОС? Я не мог бы назвать что-то портативным без квалификации "только 64-бит", если бы это было так, и я думаю, что многие (может быть, даже большинство?) программисты также ожидают, что квалификации, по крайней мере в настоящее время.


можно использовать в QEMU в мягком режиме эмуляции


нет.

см. Microsoft FAQ:

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

поймите разницу между 32-битным и 64-битным, и вы увидите, почему это невозможно.


посмотреть этой (предполагая, что вы используете Windows):

Если программа специально разработана для 64-разрядной версии Windows, она не будет работать на 32-разрядной версии Windows. (Однако большинство программ, предназначенных для 32-разрядной версии Windows, будут работать на 64-разрядной версии Windows.)

драйверы устройств, предназначенные для 64-разрядной версии Windows, не будут работать на компьютерах под управлением 32-разрядной версии Windows. Чтобы узнать, как проверить драйверы, см. обновление драйвера для оборудования, которое работает неправильно или перейдите на веб-сайт производителя устройства.


в Windows нет. На OS X, да. Я не знаю, как обстоят дела в Linux.

фактически, Snow Leopard загружается в 32-битное ядро, но по умолчанию компилирует 64-битные приложения, поэтому это довольно распространено в OS X.


64-битное приложение не работает на 32-битном процессорном периоде

64-разрядное приложение использует 64-разрядный регистр. Это просто не подходит.