【问题标题】:How do I build Boost 1.55 with Visual Studio 2013 CTP November 2013如何使用 Visual Studio 2013 CTP 构建 Boost 1.55 2013 年 11 月
【发布时间】:2014-02-11 14:37:13
【问题描述】:

我知道 boost 尚不支持新工具集,但我还是想尝试用它构建 Boost。我天真地尝试过使用 Boost 构建系统和选项toolset=msvc-12.0-ctp,但它不起作用。我相信这是可能的,因为 Boost 1.55 正式支持 Visual Studio 2013 (msvc-12.0),并且两个版本之间只有很少的重大变化。

我的动机是我需要 CTP 的一些功能,以便我自己的应用程序将使用 msvc 编译器的 CTP 版本进行编译。我担心简单地用原始的 2013 编译器编译 Boost 会导致 Boost 和我自己的应用程序之间的二进制不兼容。 Stephen T. Lavavej himself doesn't guarantee binary compatibility:

-- 在 MSVC 2013 年 11 月 CTP 中重用为 MSVC 2013 构建的 Boost 二进制文件的任何机会

因为这只是编译器,您可能可以摆脱混合和匹配。不过我不会推荐它。

关于如何解决这个问题的任何想法?提前致谢。

【问题讨论】:

    标签: c++ boost build visual-studio-2013


    【解决方案1】:

    请注意,我没有使用 Visual Studio 2013 年 11 月 CTP 构建 Boost,因此进一步的解释纯属理论。

    经过一番谷歌搜索和尝试,我终于做到了。所以,算法是:

    1. 从 subversion 中查看最新的 Boost(可能可以通过发行版完成,但我没有尝试过)

      svn co  http://svn.boost.org/svn/boost/trunk boost-trunk 
      
    2. 在位于%BOOST_HOME%/tools/build/v2/user-config.jam 文件中指定编译器的自定义路径(其中%BOOST_HOME% 是您签出发行版的路径):

      • 像这样添加一行:

      using msvc : 12.1 : "C:/Program Files (x86)/Microsoft Visual C++ Compiler Nov 2013 CTP/bin/cl" ;

      • 您可以使用任意字符串代替12.1,只需在此处添加一些内容以在稍后调用b2时区分您的工具集

      • 不要忘记在冒号前后和分号前放置空格,并且使用斜杠/ 或双反斜杠\\ 代替反斜杠\。查看user-config.jam文件的cmets中的解释

      • 确保行首没有#(即没有注释)

    3. 运行VS2013 x86 Native Tools Command prompt 或手动运行cmd.exe,然后通过调用"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" -x86 设置环境。如果需要,将 x86 更改为 x64

    4. 将 CTP 编译器的路径添加到 PATH 变量:

      set PATH=C:/Program Files (x86)/Microsoft Visual C++ Compiler Nov 2013 CTP/bin;%PATH%
      
    5. 检查 CTP 编译器的路径是否在 发布路径之前:

      echo %PATH%
      
    6. 转到%BOOST_HOME% 并运行b2 toolset=msvc-12.1 ...<other params go there>...

    7. 在流程管理器或 ProcessExplorer 中检查 b2 是否调用 CTP 编译器,而不是发布一个

    8. 不幸的是,并非所有库都能正常构建。有一些编译错误。

    另见:

    希望对您有所帮助。建设愉快! =)

    【讨论】:

    • 一个很好的答案。干杯!我用 2013 年 11 月的 CTP 编译了 Boost。我想要 x64 输出,这导致第 2 步中的以下小变化:"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86_amd64。请注意,我使用选项x86_amd64 而不仅仅是-x64。首先,它不适用于带前缀的破折号。其次,编译器cl.exe 是一个 x86 应用程序,因此必须相应地设置变量。选项x86_amd64 选择x86 编译器并指示它交叉编译为x64 [source]。
    • 很高兴它有帮助。我认为通过address-model=参数到b2来控制输出平台更容易。拥有 `Visual Studio 12.0\VC` 的路径,它会以某种方式自动完成所有工作,因此无需针对不同的编译器环境进行特殊设置。
    • @FrederikAalund 我无法构建一些库(特别是 locale、log、random、unit_test 等)。如果您能成功构建它们,能否将您的解决方案作为一个自我回答的问题发布在 SO 上?
    • 啊,我不知道address-model=64 选项会覆盖使用vcvarsall.bat 设置的变量。当我调用b2 时,我还设置了address-model=64,请确保。 Boost 库的 locale、log、random 和 unit_test 都是使用您的指南为我编译的。唯一没有编译的库是图形库。我认为该库无论如何都是标头,所以我惊讶地发现它也有源文件。我这样调用b2b2 toolset=msvc-12.1 link=static threading=multi runtime-link=static address-model=64。也许您的错误与链接有关。
    • 另外,在针对 boost 进行链接时,请确保您已禁用自动链接。后者错误地尝试加载 vc12.0 库和 not vc12.1 库。通过定义BOOST_ALL_NO_LIBSource 1Source 2)禁用自动链接。
    猜你喜欢
    • 2013-12-30
    • 2013-10-26
    • 2016-01-09
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多