使用Visual Studio 2012构建Boost 1.52库以针对Windows XP目标。

9

“Visual Studio 2012 Update 1”支持使用“vc110_xp”工具集来针对Windows XP目标进行编译。

我该如何配置Boost 1.52以使用vc110_xp工具集来构建库?


我没有指定任何东西,只是使用常规的vc110工具集构建它们。我猜vc110_xp改变的唯一事情就是COFF头中的操作系统版本。 - cxxl
它还会更改链接的库,因为WinXP不支持新库中使用的API调用。尝试链接使用vc110_xp编译的代码和使用vc110编译的boost库会产生链接错误。 - JonT
这篇文章中的“从命令行进行定位”的部分应该会有所帮助:http://blogs.msdn.com/b/vcblog/archive/2012/10/08/10357555.aspx - Raman Sharma
Boost.Build可以将许多选项转发给构建系统:http://www.boost.org/boost-build2/doc/html/bbv2/overview/invocation.html#bbv2.overview.invocation.properties...也许有一些运气。 - Martin Ba
2个回答

3
我发现最简单的方法是编辑\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat,在默认加载后添加行以更改LIBINCLUDEPATHCL变量。Boost.Build使用此批处理文件,因此您不需要进行其他更改。
例如,这里是新的:x86部分。
: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

有四个set的补充。对于:amd64部分也可以进行类似操作,但是我不太愿意发布它,因为我只测试过XP 32位版本,而且我很高兴将目标定在64位构建的Vista+。


这基本上就是我所做的,尽管最终我添加了另一个标签(:x86_xp)并创建了另一个快捷窗口。 - JonT
我也添加了x86_xp实验,但我真的不喜欢这种解决方案。 - Elvis Dukaj
@Eoin 我想按照您的建议进行操作,但是针对VC++ 2013。这是我的未修改的:x86部分: if not exist "%dp0bin\vcvars32.bat" goto missing call "%dp0bin\vcvars32.bat" goto :SetVisualStudioVersion 只需将“set”行粘贴到上面,并修改最后一行为..V120_SDK71_; 请指教。谢谢。 - Caroline Beltran
@CarolineBeltran 实际上,即使在 VC 2013 中,您仍然可以使用预处理器定义“_USING_V110_SDK71_”。但除此之外,我不再拥有 XP 机器的访问权限,因此无法测试此方法是否仍然有效。 - Eoin

1

请更改boost文件夹中以下文件的内容(已下载和提取)

文件夹:boost_1_54_0\tools\build\v2\tools

文件:

  1. msvc.jam
内容已更改:
for 32 bit :
          toolset.flags msvc LINKFLAGS <user-interface>console : /subsystem:console,5.01 ;

for 64 bit:
          toolset.flags msvc LINKFLAGS <user-interface>console : /subsystem:console,5.02 ;
  1. msvc.py
内容更改:

for 32 bit :
          toolset.flags('msvc', 'LINKFLAGS', ['<user-interface>console'], ['/subsystem:console,5.01'])

for 64 bit:
          toolset.flags('msvc', 'LINKFLAGS', ['<user-interface>console'], ['/subsystem:console,5.02'])

文件夹:boost_1_54_0\tools\build\v2\engine

文件:

  1. build.bat
内容已更改:
    for 32 bit/ 64 bit :
       1.   fix the Visual Studio Path Exactly like instead of "%ProgramFiles%- change
               to  %ProgramFiles(x86)%

       2.   Add " /D _USING_V110_SDK71_ " to BOOST_JAM_CC =cl command before Skip_VC11

打开vs2012开发人员命令提示符并键入以下命令

** 根据您的安装更新7.1A SDK路径

  1. call“%ProgramFiles(x86)%\ Microsoft Visual Studio 11.0 \ VC \ bin \ vcvars32.bat”

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

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

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

  5. 引导

  6. 根据操作系统类型选择命令(32/64位)

    对于32位:

    b2 toolset = msvc-11.0 variant = debug,release link = shared runtime-link = shared address-model = 32

    对于64位:

    b2 toolset = msvc-11.0 variant = debug,release link = shared runtime-link = shared address-model = 64

要编译任何示例的发行版和调试版本,请按照以下步骤进行:

打开vs2012开发人员命令提示符,然后键入以下命令

  1. 运行命令 "%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\bin\vcvars32.bat"

  2. 设置 INCLUDE 环境变量为 "%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Include;%INCLUDE%"

  3. 设置 PATH 环境变量为 "%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Bin;%PATH%"

  4. 设置 LIB 环境变量为 "%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Lib;%LIB%"

  5. 进入示例所在目录,例如:boost_1_54_0\libs\test\tools\console_test_runner

  6. 执行以下命令:

    <path>\boost_1_54_0\bjam.exe --v2 toolset=msvc-11.0 variant=debug,release link=shared threading=multi runtime-link=shared
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接