您的位置:首页 > 其它

在VS2012中编译WinXP兼容的程序

2013-11-18 12:42 253 查看
 原文:http://www.cnblogs.com/yejianfei/p/3416125.html

 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文件中,在所有import语句之后加上这一行:

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

微软提供的方法:

http://blogs.msdn.com/b/vcblog/archive/2012/10/08/10357555.aspx

Set the path and environment variables for Visual Studio 2012 command-line builds.

Set the required SDK paths and compiler flags using the following commands:

set INCLUDE=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Include;%INCLUDE%

set PATH=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Bin;%PATH%

set LIB=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Lib;%LIB%

set CL=/D_USING_V110_SDK71_;%CL%

When targeting x64, set the lib path as follows:

set LIB=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Lib\x64;%LIB%


Specify the correct subsystem and subsystem version for the linker based on the type of application you
are building. Applications targeting the x86 version of Windows XP must specify subsystem version 5.01, and applications targeting x64 must specify version 5.02.

For x86 console applications:

set LINK=/SUBSYSTEM:CONSOLE,5.01 %LINK%

For x64 console applications:

set LINK=/SUBSYSTEM:CONSOLE,5.02 %LINK%


Execute CL and Link as you normally would within the command prompt.

I found the easiest way was to edit
\Program
 Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat
add lines to change the
LIB
,
INCLUDE
,
PATH
and
CL
variables
after the defaults were loaded. Boost.Build uses this batch file so you don't need to make any other changes.

For example here is the new
:x86
section

[code]


[code]:x86
if not exist "%~dp0bin\vcvars32.bat" goto missing
call "%~dp0bin\vcvars32.bat"

set INCLUDE=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Include;%INCLUDE%
set PATH=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Bin;%PATH%
set LIB=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Lib;%LIB%
set CL=/D_USING_V110_SDK71_;%CL%

goto :SetVisualStudioVersion
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: