我想知道我们是否可以使用可在Windows XP上运行的visual studio 2015构建项目/二进制文件?如果它支持那么我们如何建立?
答案 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- "
注意:
cxxflags="/Zc:threadSafeInit- "
中的空格是故障的b2中的一个错误,它会删除尾随的" - "