Как мне скомпилировать для Windows XP под Windows 7 / Visual Studio 2008 - PullRequest
6 голосов
/ 06 апреля 2010

Я использую Windows 7 и Visual Studio 2008 Pro и пытаюсь заставить свое приложение работать на Windows XP SP3.

Это действительно минимальная программа командной строки, поэтому она должна иметь любые нелепые зависимости:

// XPBuild.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
    printf("Hello world");
    getchar();
    return 0;
}

Я где-то читал, что определение нескольких констант, таких как WINVER , должно позволить мне компилироваться для других платформ.Я попытался добавить следующее к моим /D опциям компилятора:

;WINVER=0x0501;_WIN32_WINNT 0x0501;NTDDI_VERSION=NTDDI_WINXP

Но это не имело никакого значения.Когда я запускаю его на своем компьютере с Windows XP (фактически работает в virtualbox ), я получаю следующую ошибку:

Это приложение не удалось запустить из-за неправильной конфигурации приложения.Переустановка приложения может решить эту проблему.

Так что я пропустил?Есть ли что-то еще, что требуется для запуска скомпилированных программ MSVC или другой опции компилятора или что-то еще?

Ответы [ 3 ]

10 голосов
/ 06 апреля 2010

То, что вы пропустили, скорее всего, программы VC ++ требуют установки среды выполнения (если вы не статически связываете, что не является значением по умолчанию) - отображаемое вами сообщение об ошибке - именно то, которое вы получаете, если они не в порядке .

Попробуйте установить Microsoft Visual C ++ 2008 SP1 Redistributable Pack на компьютере с XP - скорее всего, вы увидите, что ваша программа работает без изменений.

3 голосов
/ 18 сентября 2011

Просто установите компилятор для использования статических ссылок в настройках проекта (Project -> Properties -> Config Properties -> C / C ++ -> Generation Code -> Измените «Библиотека времени выполнения» на / MT или / MTd вместо значения по умолчанию / MD или / MDd)

3 голосов
/ 06 апреля 2010

Ответ Майкла объясняет, почему он не работает для вас, и что вы должны с этим делать. Что касается WINVER - они ничего не изменяют в вашем двоичном файле в том смысле, что он внезапно начнет работать на XP. Они отключают объявления функций и типов в файлах заголовков Windows, которые не поддерживаются в версии ОС, указанной WINVER. Это гарантирует, что вы случайно не позвоните, например, некоторая функция только для Vista. Однако вам не нужно строго - если ваш код не использует какие-либо функции только для Vista / 7, вы можете скомпилировать его без переопределения WINVER, и он все равно будет работать в XP.

...