2013-03-28 45 views
4

由于类似这样的问题等:如何在编译Boost时更改/检查b2使用的编译器?

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

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

所以我想重新编译boost库,使用我用于我的程序,即macports gcc(g ++ - mp-4.8)的相同编译器。根据一些网上的说明,我的理解是,我编辑工具/编译/ V2 /用户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 ; 

我的用户config.jam中复制到我的主目录,重新运行bootstrap.sh并重新运行b2。但是,我仍然得到我的错误出现(“指针被释放没有分配***设置malloc_error_break断点调试”)。这是指定编译器用于编译的正确过程吗?当我运行b2时,如何检查哪个编译器提升实际使用?

回答

4

请假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

+1

什么是指定在用户config.jam中的编译器,并指定其运行./configure(HTTP之间的关系://www.boost。 org/doc/libs/1_53_0/libs/config/doc/html/index.html)?我发现这有点令人困惑。这只是两种方式来指定相同的事情或配置完全无关? – daj

+0

我发现奇怪的另一件事是,当我取消注释我上面写的内容并使用了toolset = gcc时,我发现大量链接器错误抱怨ld的未定义命令行参数。我尝试将它改为“darwin:4.8:gcc-mp-4.8”,并使用toolset = darwin,并以某种方式摆脱了链接器错误(虽然有很多关于“typedef'[XXX]'的警告,但本地定义用过的”)。 – daj

+1

@daj 1)'Boost.Config'文档说:“这个配置脚本只设置了用于特定编译器的Boost头文件,它对Boost.Build没有影响,或者库的构建方式。 2)当你调用'toolset = gcc'时,它会转到默认的gcc配置;你实际上的意思是'toolset = gcc-4.8' - 这将调用以'使用gcc:4.8:g ++ - mp-4.8;' –