VS2012默認是不兼容Windows XP的,編譯鏈接出來的程序只能在Windows Vista及以上版本的操作系統上運行。可是有時需要在Windows XP上運行,又不得不用VS2012(例如用了C++11的<thread>等等)。這時,就犯愁了。沒關系,這個問題可以搞定。
首先,你的VS2012必須升級到Update 3,否則無法編譯出WinXP兼容的程序。
在VS2012集成開發環境中
編譯工程時,在VS2012左側的“解決方案管理器”是單擊右鍵,在右鍵菜單中單擊“屬性”,然后在“配置屬性”->“常規”的選項中找到“平台工具集”,在下拉菜單中選中“Visual Studio 2012 - Windows XP (v110_xp)”選項,單擊“確定”即可。

在命令提示符中
那么,如果我是在命令行中編譯呢?沒關系,把這個“Visual Studio 2012 - Windows XP (v110_xp)”選項的命令行參數查出來就行。
編譯參數: /D _USING_V110_SDK71 console子系統鏈接參數: /SUBSYSTEM:CONSOLE,"5.01" windows子系統鏈接參數: /SUBSYSTEM:WINDOWS,"5.01"
知道了這三個參數就行了。
例如編譯boost庫
在tools\build\v2\engine\build.jam文件中,找到-subsystem console,出現兩次,全部改成-subsystem console,"5.01"
然后在tools\build\v2\tools\msvc.jam文件中,在# 8.0 and above adds some more options.之后加上這一行:
toolset.flags $(toolset).compile DEFINES : _USING_V110_SDK71_
再找到這兩行:
toolset.flags msvc LINKFLAGS <user-interface>console : /subsystem:console ; toolset.flags msvc LINKFLAGS <user-interface>gui : /subsystem:windows ;
把/subsystem:console改成/subsystem:console,"5.01",並把/subsystem:windows改成/subsystem:windows,"5.01",就可以開始編譯了。
例如編譯Qt庫
在qtbase\mkspecs\win32-msvc2012\qmake.conf文件中找到這兩行:
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS
把QMAKE_LFLAGS_CONSOLE參數中的/SUBSYSTEM:CONSOLE參數改成/SUBSYSTEM:CONSOLE,"5.01",把QMAKE_LFLAGS_WINDOWS中的/SUBSYSTEM:WINDOWS參數改成/SUBSYSTEM:WINDOWS,"5.01"。
然后再找這兩行
QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t-
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
在QMAKE_CFLAGS和QMAKE_CXXFLAGS中都加上/D _USING_V110_SDK71然后就可以開始編譯Qt庫了。
