MS Visual Studio 2012 Express для рабочего стола Windows — Ориентация на Windows XP

Я недавно обновил Visual Studio Express 2010 до Visual Studio 2012 Express для Windows Desktop. Мне известно о предыдущем недостатке совместимости с Windows XP, но я подумал, что это было решено с помощью обновления 1 (которое я установил).

Тем не менее, у меня все еще возникают трудности с ориентацией на Win XP с приложениями C ++, которые я скомпилировал с помощью 2012 Express. Я установил Platform Toolset в «Visual Studio 2012 — Windows XP (v110_xp)», но это не имеет значения. Когда я пытаюсь запустить скомпилированное приложение в моей системе Windows XP (я запускаю Windows XP через VirtualBox), я получаю сообщение об ошибке, что мое приложение «не является допустимым приложением Win32».

Я также попытался установить для поддержки CLR значение «No Common Language Runtime Support» и для библиотеки времени выполнения «Multi-Threading (/ MT)».

Даже с очень простым пустым проектом C ++, использующим следующий код, я просто не могу заставить его работать на XP:

#define _WIN32_WINNT 0x0501
#define WINVER 0x0501
#define NTDDI_VERSION 0x0501

#include <iostream>

int main()
{
std::cout << "TEST" << std::endl;

std::cout << std::endl << std::endl << "Press ENTER to close this window.";
std::cin.get();
return 0;
}

Кто-нибудь может сказать мне, где я не так с настройками моего компилятора / проекта?

Постскриптум Я установил распространяемые пакеты MS VC ++ 2010 и 2012 на свою виртуальную машину XP. Приложения, скомпилированные с помощью Visual Studio Express 2010, отлично работают на моей виртуальной машине с XP.

6

Решение

Проверь свой проект «Свойства конфигурации -> Linker -> система -> подсистемасвойства
Если пусто, заполните его (/SUBSYSTEM:CONSOLE) или же (/SUBSYSTEM:WINDOWS),

1

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

Это работает:

Свойства конфигурации -> Компоновщик -> Система -> Подсистема =
/ SUBSYSTEM: WINDOWS

Свойства конфигурации -> Общие -> Набор инструментов платформы ->
Подсистема Visual Studio 2012 — Windows XP (v110_xp)

Использование Visual Studio 2012 Express Update 3.

1

Используйте цепочку инструментов GNU GCC, братан, который перераспределен с помощью mingw. MSVS фактически минимизирует зависимости, но некоторые из них все еще остаются в exe. Просто компиляция в gcc поддерживает полное статическое связывание, с небольшим размером exe и стабильной совместимостью.

1

Сообщение указывает, что ваша сборка не создает 32-битное приложение — если бы это был, например, зависимый от версии API, вы бы увидели другую ошибку, указывающую, что символ не может быть найден. Поскольку вы указали, что используете правильную целевую платформу в диспетчере конфигурации, проверьте проводник свойств, чтобы убедиться, что у вас нет конфликтующих аргументов или значений по умолчанию. Если вы видите ссылку с параметром / MACHINE: X64, значит, вы нашли проблему.

Если это не сработает, я полагаю, вы можете попробовать запустить проводник процессов Sysinternals, чтобы увидеть, какие cl / link на самом деле запускаются с какими аргументами. Надеюсь, это поможет.

0
По вопросам рекламы [email protected]