【问题标题】:How to change/check the compiler used by b2 when compiling Boost?编译Boost时如何更改/检查b2使用的编译器?
【发布时间】:2013-03-28 16:19:13
【问题描述】:

由于类似这样的问题:

Mac OS X and static boost libs -> std::string fail

即在调用 boost 文件系统目录迭代器构造函数时,我得到一个运行时错误“未分配释放的指针 *** 在 malloc_error_break 中设置断点进行调试”。我的印象是,如果 boost 和程序使用不同的编译器编译,就会发生这种情况。

所以我正在尝试使用与我的程序相同的编译器重新编译 boost 库,即 macports gcc (g++-mp-4.8)。根据网上的一些说明,我的理解是我编辑tools/build/v2/user-config.jam,指定编译器,所以现在说:

# Configure gcc (default version).
# using gcc ;

# Configure specific gcc version, giving alternative name to use.
# using gcc : 4.8 : g++-mp-4.8 ;

我将 user-config.jam 复制到我的主目录,重新运行 bootstrap.sh 并重新运行 b2。但是,我仍然会出现错误(“未分配被释放的指针 *** 在 malloc_error_break 中设置断点以进行调试”)。这是指定用于编译的编译器的正确程序吗?当我运行 b2 时,如何查看实际使用的编译器 boost?

【问题讨论】:

    标签: c++ macos boost


    【解决方案1】:

    \boost\tools\build\v2 中留下user-config.jam。 请注意,从# 开始的行是 cmets。 您的配置应如下所示(假设 g++ 位于 full/Path/ 并命名为 g++-mp4.8):

      using gcc : macports :
             full/Path/g++-mp4.8 :
      <compileflags>--sysroot=full/path/to/sysroot
      ;
    

    您可能还需要设置&lt;archiver&gt;&lt;ranlib&gt; 选项以允许Boost.Build 定位arranlib

    b2 行中调用此配置,如下所示:

    b2 toolset=gcc-macports

    【讨论】:

    • 在 user-config.jam 中指定编译器和在 ./configure (boost.org/doc/libs/1_53_0/libs/config/doc/html/index.html) 中指定编译器有什么关系?我发现这有点令人困惑。这只是指定同一事物的两种方式还是配置完全不相关?
    • 我觉得奇怪的另一件事是,当我取消注释上面写的内容并使用工具集 = gcc 时,我发现很多链接器错误抱怨未定义的命令行参数给 ld。我尝试将其更改为“darwin:4.8:gcc-mp-4.8”并使用toolset = darwin并以某种方式摆脱了链接器错误(尽管有很多关于“typedef'[XXX]'本地定义但不是使用”)。
    • @daj 1) Boost.Config 文档说:“此配置脚本仅设置 Boost 头文件以与特定编译器一起使用。它对 Boost.Build 或库的构建方式没有影响”。 2)当你调用toolset=gcc时,它会进入默认的gcc配置;您的实际意思是toolset=gcc-4.8 - 这将调用以using gcc : 4.8 : g++-mp-4.8 ; 开头的部分
    • @daj 查看以下链接了解详情:boost.org/boost-build2/doc/html/bbv2/overview/…
    猜你喜欢
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    相关资源
    最近更新 更多