在VS2012中编译WinXP兼容的程序

  VS2012默认是不兼容Windows XP的,编译连接出来的程序只能在Windows Vista及以上版本的操做系统上运行。但是有时须要在Windows XP上运行,又不得不用VS2012(例如用了C++11的<thread>等等)。这时,就犯愁了。不要紧,这个问题能够搞定。windows

  首先,你的VS2012必须升级到Update 3,不然没法编译出WinXP兼容的程序。工具

在VS2012集成开发环境中

  编译工程时,在VS2012左侧的“解决方案管理器”是单击右键,在右键菜单中单击“属性”,而后在“配置属性”->“常规”的选项中找到“平台工具集”,在下拉菜单中选中“Visual Studio 2012 - Windows XP (v110_xp)”选项,单击“肯定”便可。ui

VS2012 Update 3 的工程属性界面

 

 

在命令提示符中

  那么,若是我是在命令行中编译呢?不要紧,把这个“Visual Studio 2012 - Windows XP (v110_xp)”选项的命令行参数查出来就行。spa

编译参数:                 /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.以后加上这一行:code

toolset.flags $(toolset).compile DEFINES :  _USING_V110_SDK71_

再找到这两行:blog

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文件中找到这两行:qt

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库了。

相关文章
相关标签/搜索