【问题标题】:How to build Boost 1.64 in 64 bits?如何以 64 位构建 Boost 1.64?
【发布时间】:2017-05-12 21:12:19
【问题描述】:

我正在运行 Windows 10 并在我的笔记本电脑中安装了 Visual Studio 2017 社区版。 我有一些在 VS 2015 中使用 64 位 Boost 1.62.0 编译得很好的旧程序。 由于一些非常奇怪的原因,我找不到使用 VS 2017 和这个命令行从 Boost 1.64.0(这里是文件系统和计时器)编译任何库的方法:

b2 --build-dir=..\build_here --with-filesystem --with-timer --address-model=64

将执行命令并构建库,但为 32 位!

可能出了什么问题?

问候, 胡安·登特

【问题讨论】:

  • 对于 Visual Studio,您可以跳过整个构建步骤,只需 get the binaries directly
  • 如果您获得了 Visual Studio 2017 64 位所需的 14.1 x64 二进制文件。
  • 这是我用来为 VS2013 x64 构建 boost 1.60 的命令:X:/Other/Libraries/boost_1_60_0/bjam.exe -j%NUMBER_OF_PROCESSORS% --without-python --without-mpi address-model=64 --build-dir=X:/x64.13/VC.120/Libraries/Boost-1.60.0/build --prefix=X:/x64.13/VC.120 /Libraries/Boost-1.60.0 --toolset=msvc-12.0 --build-type=complete stage install
  • 将执行命令并构建库,但为 32 位! 也许您需要从 Visual Studio 2017 执行该命令x64 命令提示符。对于我所针对的相同版本的编译器,我总是从正确的 32 位或 64 位命令提示符构建。
  • VS2017 存在一个特定问题,他们无法让 bjam 运行。这当然很难做到。那是最近的,有点怀疑他们是否修复了它。是的,下载预构建的二进制文件。

标签: c++ boost


【解决方案1】:

更新我给here的答案。 Visual Studio 2017 是一个新工具集,因此只需将 toolset=msvc-14.0(对于 Visual Studio 2015)替换为 toolset=msvc-14.1,即:

在 Visual Studio 工具命令提示符中:

cd boost_1_64_0
call bootstrap.bat

对于静态库(推荐用于 Windows):

b2 -j8 toolset=msvc-14.1 address-model=64 architecture=x86 link=static threading=multi runtime-link=shared --build-type=complete stage

注意:线程必须使用动态链接构建,请参阅:https://studiofreya.com/2015/05/20/the-simplest-way-of-building-boost-1-58-for-32-bit-and-64-bit-architectures-with-visual-studio/

在动态库中构建线程:

b2 -j8 toolset=msvc-14.1 address-model=64 architecture=x86 link=shared threading=multi runtime-link=shared --with-thread --build-type=minimal stage

注意:Visual Studio 2017 的正确 b2 工具集是 msvc-14.1 不是 msvc-15.0
Visual Studio 2019b2 工具集是 msvc-14.2
如果有疑问(并且您只安装了一个版本的 Visual Studio),请使用 toolset=msvc

【讨论】:

    【解决方案2】:

    我不知道为什么,但是 Boost 是用 32 位编译的,与 VS 2017 的原生 x64 提示符相同。

    这一步一步对我有用:

    1. 为 VS 2017 打开 x64 Native Tools 命令提示符;
    2. 将 boost_1_66_0\project-config.jam 更改为:

      import option ; //Check your compiler path here: using msvc : 14.1 : "C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Tools/MSVC/14.12.25827/bin/Hostx64/x64/cl.exe"; using mpi ; option.set keep-going : false ;

    3. 运行:

      b2.exe --toolset=msvc-14.1 --address-model=64 --architecture=x86 --runtime-link=static,shared --link=static threading=multi --build-dir=build\x64 install --prefix="C:\Program Files\Boost" -j4

      bjam.exe toolset=msvc-14.1 address-model=64 architecture=x86 runtime-link=static,shared link=static threading=multi build-dir=build\x64 install prefix="C:\Program Files\Boost" -j4

    您应该在编译开始时有一个 64 位 = yes。

    【讨论】:

    • 这似乎对我不起作用,运行 #1 在 b2.exe 开始时仍然产生 32 位,而 2nd 甚至没有执行
    • 我发现在地址模型之前删除“--”可能会有所帮助
    【解决方案3】:

    尝试指定 architecture=ia64

    例如

    b2.exe --toolset=msvc-14.1 --address-model=64 --architecture=ia64 --runtime-link=static,shared --link=static threading=multi --build-dir=build\x64 install --prefix="C:\Program Files\Boost" -j4
    

    【讨论】:

    • x64 不是architecture 的有效值
    【解决方案4】:

    考虑通过输入您需要的每个 boost 版本目录并在那里运行来节省大量时间:

    bootstrap && b2 -a install
    

    这样创建的 C:\Boost 目录包含所有可能的库构建选项组合,包括 x64。您可能需要打开此目录压缩。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-11
      • 2015-05-30
      • 2010-12-04
      • 2011-10-18
      • 2014-04-10
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      相关资源
      最近更新 更多