通过VS2019命令行编译适配32位Windows XP的C++程序时如何切换工具集
问题根因说明
你遇到的MSB8020报错核心是命令行环境和v141_xp工具集的安装路径不匹配:你将v141_xp组件安装到了C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools路径下,但你当前使用的是VS2019 Community版的命令行工具,后者的MSBuild不会主动扫描BuildTools目录下的工具集。另外你之前遇到的/SUBSYSTEM参数不识别问题,是因为该参数属于链接器参数,必须放在/link字段之后才会生效。
cl命令行直接编译方案(无需MSBuild,操作更简单)
步骤1:启动适配XP的编译环境
- 方式一:从开始菜单找到
Visual Studio 2019文件夹,直接启动x86 Native Tools Command Prompt for VS 2019 (v141_xp) - 方式二:手动执行环境配置脚本,进入
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build目录,执行命令:
该命令会自动配置好v141_xp工具集的头文件、库路径以及XP适配的编译参数预设。vcvars32.bat x86 10.0.17763.0 8.1
步骤2:重新编译适配v141_xp的Boost库
你当前使用的是vc142版本的Boost静态库,和v141_xp工具集不兼容,必须重新编译:
- 进入Boost源码目录,执行
bootstrap.bat vc141生成b2编译工具 - 执行编译命令生成对应版本的库文件:
b2 toolset=msvc-14.1_xp address-model=32 runtime-link=static link=static --with-program_options stage
步骤3:调整cl编译命令执行编译
修改后的编译命令如下:
cl sources\*.cpp /EHsc /D_WIN32_WINNT=0x0501 /I headers /I <path to boost> /link /SUBSYSTEM:CONSOLE,5.01 /LIBPATH:<path to boost>\stage\lib libboost_program_options-vc141-mt-s-x32-1_77.lib /out:exec_xp.exe
- 如果你要生成GUI程序,把
/SUBSYSTEM:CONSOLE,5.01改成/SUBSYSTEM:WINDOWS,5.01即可
MSBuild编译方案
如果你需要用MSBuild编译项目,直接调用BuildTools目录下的MSBuild即可:
"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe" 你的项目文件.vcxproj /p:PlatformToolset=v141_xp /p:Platform=Win32 /p:Configuration=Release
内容的提问来源于stack exchange,提问作者winwin
相关产品推荐
相关产品推荐

