64位Windows的64位Boost版本

120

是否有适用于VS2008的64位Boost库版本?或者我必须自己编译一个?如果是,则有人有经验吗?

5个回答

226

简短回答:

bjam --toolset=msvc-9.0 address-model=64 --build-type=complete

作为更长的答案,以下是我关于在同一目录结构中拥有 VS .NET 2008 32 位和 64 位 Boost 库的构建笔记(我认为这是一个常见的用例):

  1. 构建 win32 二进制文件

bjam --toolset=msvc-9.0 --build-type=complete stage
  • 创建目录lib\win32

  • 将stage\lib目录下的内容移动到lib\win32中
  • 删除bin.v2和stage目录
  • 构建x64二进制文件

  • bjam --toolset=msvc-9.0 address-model=64 --build-type=complete stage
    
  • 创建目录 lib\x64

  • 将 stage\lib 的内容移动到 lib\x64
  • 删除 bin.v2 和 stage 目录

  • 25
    您可以指定阶段目录,从而无需复制生成的库文件:bjam --toolset=msvc-9.0 address-model=64 --build-type=complete --stagedir=lib\x64 stage - hkaiser
    16
    很遗憾,使用64位地址模型构建时,address-model=64无法工作。您需要将路径指向Visual Studio \ bin \ amd64 \ cl.exe才能构建64位版本。否则,它会构建32位版本。要实现这一点,您可以启动Microsoft SDK命令提示符,并使用“setenv / Release / x64”重新定义所有路径。 - Budric
    1
    感谢@Budric的帮助。如果使用Windows SDK 7.1 和2010 Express,则必须从开始菜单中启动 SDK 命令提示符。如果它没有报告64位,请按照您所说的使用setenv。然后,重新运行引导程序。最后,在任何标准参数之外,使用address-model=64运行b2。 - kipkennedy
    2
    @Budric,你确定吗?对我来说似乎已经起作用了,并且this明确说明即使在64位构建时也要提供32位编译器的路径。 - Maciej Gryka
    4
    如果需要构建32位和64位版本,也可以使用stagedir参数: "bjam --stagedir=./lib_64bit address-model=64 toolset=msvc threading=multi" 和 "bjam --stagedir=./lib toolset=msvc threading=multi" - Odin
    显示剩余2条评论

    63

    5
    非常感谢您提供这个,因为BoostPRo(提供Boost库二进制文件的公司)没有提供x64版本。谢谢! - CharlesB
    有没有可能发布VS2015(VC++14)的二进制文件?这将不胜感激。 - Russell Greene
    1
    msvc-14.0 二进制文件将在 1.59 版本中发布,预计几周内发布。 - teeks99

    22

    更新(2017年9月19日):添加了VS2017的脚本行。请注意,Boost从某个版本开始支持VS2017编译器。我使用了最新版本(1.65.1)。

    我使用这些脚本为x64和x86平台构建Boost,包括VS2017、VS2015和VS2013的lib和dll,debug和release版本:

    md stage\VS2017\x64
    md stage\VS2015\x64
    md stage\VS2013\x64    
    
    b2 --stagedir=./stage/VS2017/x64 address-model=64 --build-type=complete --toolset=msvc-14.1 --threading=multi --runtime-link=shared --variant=debug
    b2 --stagedir=./stage/VS2017/x64 address-model=64 --build-type=complete --toolset=msvc-14.1 --threading=multi --runtime-link=shared --variant=release  
    
    b2 --stagedir=./stage/VS2015/x64 address-model=64 --build-type=complete --toolset=msvc-14.0 --threading=multi --runtime-link=shared --variant=debug
    b2 --stagedir=./stage/VS2015/x64 address-model=64 --build-type=complete --toolset=msvc-14.0 --threading=multi --runtime-link=shared --variant=release
    
    b2 --stagedir=./stage/VS2013/x64 address-model=64 --build-type=complete --toolset=msvc-12.0 --threading=multi --runtime-link=shared --variant=debug
    b2 --stagedir=./stage/VS2013/x64 address-model=64 --build-type=complete --toolset=msvc-12.0 --threading=multi --runtime-link=shared --variant=release
    
    
    md stage\VS2017\win32
    md stage\VS2015\win32
    md stage\VS2013\win32
    
    b2 --stagedir=./stage/VS2017/win32 --build-type=complete --toolset=msvc-14.1 --threading=multi --runtime-link=shared --variant=debug
    b2 --stagedir=./stage/VS2017/win32 --build-type=complete --toolset=msvc-14.1 --threading=multi --runtime-link=shared --variant=release
    
    b2 --stagedir=./stage/VS2015/win32 --build-type=complete --toolset=msvc-14.0 --threading=multi --runtime-link=shared --variant=debug
    b2 --stagedir=./stage/VS2015/win32 --build-type=complete --toolset=msvc-14.0 --threading=multi --runtime-link=shared --variant=release
    
    b2 --stagedir=./stage/VS2013/win32 --build-type=complete --toolset=msvc-12.0 --threading=multi --runtime-link=shared --variant=debug
    b2 --stagedir=./stage/VS2013/win32 --build-type=complete --toolset=msvc-12.0 --threading=multi --runtime-link=shared --variant=release
    
    pause
    

    你可以制作一个 .bat 文件并运行它来构建你的 Boost 二进制文件。


    12
    此时,来自 teeks99 的 64 位二进制文件(参见其他答案)似乎是唯一免费的 64 位二进制文件。 BoostPro 也提供了一段时间的 64 位二进制文件,但从 1.51 开始它们似乎已经退出或业务停止。
    因此,我们又回到两个选择:使用 teeks99 的二进制文件或者自己构建。
    我需要构建自己的大部分信息都在这里:https://dev59.com/b3E85IYBdhLWcg3wwWQb#2655683 唯一缺失的是如何将其与 Visual Studio 2010 Express 免费版配合使用。我在其他地方找到了这个遗漏部分,并在一些自定义后,我用于构建 boost 1.49.0 二进制文件的最终步骤是:
    启动 Visual C++,从“工具”菜单中启动“Visual Studio 命令提示符”。
    在控制台窗口中,执行以下操作:
    "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\setenv.cmd"  /Release  /x64
    

    然后进入 boost 目录:

    bootstrap.bat
    b2  -a  -sBZIP2_SOURCE="C:\bzip2-1.0.6"   -sZLIB_SOURCE="C:\zlib-1.2.5"   --toolset=msvc-10.0  architecture=x86  address-model=64  link=static  --with-date_time  --with-filesystem  --with-serialization  --with-test  --with-thread  --with-system  --with-regex  --with-iostreams  stage
    

    最后一个命令是根据我所需进行的定制(只需要一些静态链接库)。


    我下载了他们的x64 1_51安装程序,但其中包含有损坏的系统库存档,并且似乎还有一些其他的库是x86的(我收到了链接器警告)。在切换到teeks99的库后,一切都变得正常了。 - Alex

    4

    我写了一个小脚本,用于将它们编译为VS2005和VS2008:

    md stage\lib\win32
    md stage\lib\x64
    
    REM Visual Studio 2005
    bjam --toolset=msvc-8.0 --build-type=complete stage
    move /Y stage\lib\* stage\lib\win32\
    
    bjam --toolset=msvc-8.0 address-model=64 --build-type=complete stage
    move /Y stage\lib\* stage\lib\x64\
    
    REM Visual Studio 2008
    bjam --toolset=msvc-9.0 --build-type=complete stage
    move /Y stage\lib\* stage\lib\win32\
    
    bjam --toolset=msvc-9.0 address-model=64 --build-type=complete stage
    move /Y stage\lib\* stage\lib\x64\
    

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