5

由于类似这样的问题:

Mac OS X 和静态提升库 - > std::string 失败

即在调用 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?

4

1 回答 1

7

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

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

您可能还需要设置<archiver><ranlib>选项以允许 Boost.Build 定位arranlib.

像这样在行中调用此配置b2

b2 toolset=gcc-macports

于 2013-03-29T08:45:47.263 回答