Я разрабатываю 64-битное приложение.Можно ли запустить 64-битное приложение на 32-битной ОС? - PullRequest
12 голосов
/ 25 февраля 2010

Я занимаюсь разработкой 64-битного приложения. Можно ли запустить 64-битное приложение на 32-битной ОС?

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

Ответы [ 9 ]

14 голосов
/ 25 февраля 2010

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

Вы можете запускать код AMD64 на процессорах x86 только путем эмуляции (например, qemu ) или некоторых видов виртуализации (я считаю, что VMWare может поддерживать 64-битные гостевые ОС на 32-битных хост-ОС на 64-битных ОС битовый процессор). Однако это означает запуск 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 без проблем.

7 голосов
/ 25 февраля 2010

В Windows, только с использованием виртуальной машины .

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

5 голосов
/ 25 февраля 2010

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

4 голосов
/ 26 февраля 2010

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

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

3 голосов
/ 25 февраля 2010

номер

См. Microsoft FAQ :

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

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

3 голосов
/ 25 февраля 2010

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

2 голосов
/ 26 февраля 2010

64-битное приложение не запускается на 32-битном процессоре

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

2 голосов
/ 26 февраля 2010

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

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

2 голосов
/ 25 февраля 2010

См. это (при условии, что вы используете Windows):

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

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

...