从visual studio 2015企业更新1中定位Windows xp

时间:2015-12-28 06:14:56

标签: visual-c++ visual-studio-2015 windows-xp

我想知道我们是否可以使用可在Windows XP上运行的visual studio 2015构建项目/二进制文件?如果它支持那么我们如何建立?

2 个答案:

答案 0 :(得分:3)

Configuring C++ 11 Programs for Windows XP

  

Visual Studio中包含的Windows XP平台工具集是Visual Studio 2010中包含的Windows 7 SDK的一个版本,但它使用当前的C ++编译器。它还将项目属性配置为适当的默认值 - 例如,用于下级目标的兼容链接器的规范。只有使用Windows XP平台工具集创建的Windows桌面应用程序才能在Windows XP和Windows Server 2003上运行,但这些应用程序也可以在更新的操作系统上运行 - 例如,Windows Vista,Windows 7,Windows Server 2008,Windows 8或Windows Server 2012。

     

定位Windows XP

     
      
  • 在Solution Explorer中,打开项目的快捷菜单,然后选择Properties。
  •   
  • 在项目的“属性页”对话框中的“配置属性”下,将“平台工具集”属性设置为所需的Windows XP工具集。例如,选择Visual Studio 2012 - Windows XP(v110_xp)以创建与Microsoft Visual C ++ 2012可再发行组件库二进制兼容的代码。
  •   

答案 1 :(得分:2)

如dxiv所述,Windows XP可以使用正确的平台工具集(Visual Studio 2015 - Windows XP(v140_xp))从visual studio定位。

这并非在所有情况下都足够。因为vs编译器是通过propper线程本地存储(TLS)处理扩展的,所以还需要进行其他更改。 Windows XP不支持新的TLS,因此不会初始化dll中的静态对象。如果你想避免这个问题,可以使用额外的编译器标志/Zc:threadSafeInit-来禁用这个有问题的功能。

如果你想使用boost,你必须自己构建它。要使其与Windows XP兼容,必须添加以下选项:

1)在构建之前使用b2(bjam)

运行这些命令
CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86
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%"

2)对b2使用这些附加选项

toolset=msvc-14.0 
address-model=32 
define=BOOST_USE_WINAPI_VERSION=0x0501 
define=_USING_V110_SDK71_ 
linkflags=/SUBSYSTEM:CONSOLE,5.01 
cxxflags="/Zc:threadSafeInit- "

注意:

  • 定义是_USING_V110_SDK71_而不是_USING_V140_SDK71 _。
  • cxxflags="/Zc:threadSafeInit- "中的空格是故障的b2中的一个错误,它会删除尾随的" - "