Windows — MS Visual Studio Professional 2013 — C ++ Компилировать один исполняемый файл для 32-битных и 64-битных операционных систем?

Google дал мне понять, что это возможно скомпилировать код в один исполняемый файл, который будет работать как 32-разрядная на 32-разрядной ОС и в качестве 64-разрядная на 64-разрядной ОС. Реально ли для исполняемого файла определить его разрядность во время выполнения?

В моем случае целевые системы были бы Windows 7 Professional x64 а также Windows XP SP3 x86,

Итак, что я читаю в различных статьях (я думаю, что были даже ответы на похожие темы по SO), так это то, что нужно идти к Soltuion«s Configuration Manager (Юаней на решение -> Менеджер конфигурации) и установите Platform в Любой процессор.

Теперь во всех этих статьях описана установка для более старых версий MSVS или MSVC ++, но я думаю, что в Configuration Manager в версии RC 2013 года (которую я только недавно установил).

в Active Solution выпадающий у меня нет возможности Any CPUвот я и пошёл этот рецепт что я нашел на ТАК. Следуя этому небольшому руководству не удается в моем случае, у меня все еще нет возможности выбрать Any CPU при выполнении шага 5:

  • 5) Убедитесь, что в разделе «Новая платформа» выбран «Любой процессор». Если бы был
    На шаге 3 нет платформы с процессором, затем убедитесь, что
    флажок «Новые решения платформы». Затем нажмите кнопку ОК.

Доступные мне выпадающие элементы: x64 а также ARM (Win32 тоже, но это уже добавлено по умолчанию), я не могу выбрал Any CPU,

Добавление целевой платформы x64 и компиляция исполняемого файла работает нормально, программа работает как 64-битная на Windows 7 x64, но, конечно, она не может быть запущена на 32-битной машине с Windows XP.

Как мне установить целевую платформу на Any CPU в Microsoft Visual Studio Professional 2013 RC?

1

Решение

Нет, это абсолютно не так. Вам нужно определить отдельные исполняемые файлы.

Раскрывающийся список «Любой ЦП» позволяет установить параметры компилятора для нескольких платформ (например, процессор _DEBUG для x64 и Win32). На самом деле вы не можете выполнить сборку для этой цели.

2

Другие решения

AnyCPU относится к программам .Net, а не к C ++. C ++ должен компилироваться до нативного, x86 или x64. Вы можете собрать 64-битную программу и встроить ее в 32-программу, извлекая ее во время выполнения. Эта техника используется ProcessExplorer.

2

Возможно, это не верный ответ, но для большинства вещей запуск 32-битного кода в 64-битной системе работает абсолютно нормально. Конечно, он может работать немного медленнее, но по сравнению с необходимостью иметь дело (и тщательно тестировать) два разных двоичных файла, если только это не приводит к значительным преимуществам в производительности в 64-битном режиме (или если ваше приложение использует более 2 ГБ пространства памяти), Я бы очень хотел использовать 32-битный режим.

2

MacOS поддерживает так называемые «толстые двоичные файлы», где программа компилируется дважды, и обе версии упаковываются в один файл. ОС решает, какую версию запустить.

Windows не имеет ничего подобного.

1

Вы можете скомпилировать оболочку .NET (Любой ЦП) и остальную часть программы как yourprogram86.dll и yourprogram64.dll.

[DllImport("yourprogram32.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "open")]
public static extern void open32();

[DllImport("yourprogram64.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "open")]
public static extern void open64();

static bool Is64()
{
//.Net 4.0
//Environment.Is64BitOperatingSystem

//.Net 2.0
return IntPtr.Size == 8;
}

static void open()
{
if (Is64())
open64();
else
open32();
}
1
По вопросам рекламы [email protected]