在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左侧的“解决方案管理器”是单击右键,在右键菜单中单击“属性”,然后在“配置属性”->“常规”的选项中找到“平台工具集”,在下拉菜单中选中“Visual Studio 2012 - Windows XP (v110_xp)”选项,单击“确定”即可。
那么,如果我是在命令行中编译呢?没关系,把这个“Visual Studio 2012 - Windows XP (v110_xp)”选项的命令行参数查出来就行。
知道了这三个参数就行了。
在tools\build\v2\engine\build.jam文件中,找到-subsystem console,出现两次,全部改成-subsystem console,"5.01"
然后在tools\build\v2\tools\msvc.jam文件中,在所有import语句之后加上这一行:
再找到这两行:
把/subsystem:console改成/subsystem:console,"5.01",并把/subsystem:windows改成/subsystem:windows,"5.01",就可以开始编译了。
在qtbase\mkspecs\win32-msvc2012\qmake.conf文件中找到这两行:
把QMAKE_LFLAGS_CONSOLE参数中的/SUBSYSTEM:CONSOLE参数改成/SUBSYSTEM:CONSOLE,"5.01",把QMAKE_LFLAGS_WINDOWS中的/SUBSYSTEM:WINDOWS参数改成/SUBSYSTEM:WINDOWS,"5.01"。
然后再找这两行
在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
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
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.batadd lines to change the
LIB,
INCLUDE,
PATHand
CLvariables
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
:x86section
[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
相关文章推荐
- VS2012编译可在WinXP兼容程序
- 在VS2012中编译WinXP兼容的程序
- 在VS2012中编译WinXP兼容的程序
- 在VS2012中编译WinXP兼容的程序
- 在VS2012中编译WinXP兼容的程序
- 在VS2012中编译WinXP兼容的程序
- 在WinXP上运行VS2012编译的C++程序
- VS2012编译兼容XP程序的方法
- GCC 64位程序的makefile条件编译心得——32位版与64位版、debug版与release版(兼容MinGW、TDM-GCC)
- VS2012怎么编译出xp的程序
- vs2012编译的程序不能在XP和2003下执行问题的解决方法
- vs2012编译的程序无法在xp下运行(不是有效的WIN32 应用程序)
- VS2012编译出来的程序,在XP上运行,出现“.exe 不是有效的 win32 应用程序” “not a valid win32 application”
- VS2012 编译程序时报无法加载PDB文件错误解决方案
- 安装vs2012 之后,vs2010 编译程序出现fatal error LNK1123 转换到 COFF 期间失败 文件无效或损坏
- GCC 64位程序的makefile条件编译心得——32位版与64位版、debug版与release版(兼容MinGW、TDM-GCC)
- VS2013下MFC和.net混合编程编译XP兼容程序时的C1107错误的解决方法
- 解决VS2012编译出现ERROR C1902:程序数据库管理器不匹配
- VS2012中使用编译的Qt-5.1.1静态库开发程序
- VS2013编译WinXP下运行程序注意事项