使用MacPorts gcc48无法识别的命令行选项'-stdlib = libc ++'

use*_*020 11 c++ g++ macports rootpy g++4.8

上下文

我正在尝试编译包"root_numpy",它是科学分析软件"root"和python包"numpy"之间的链接.它被用作根包装器"rootpy"的一部分.执行以下行时出现g ++错误:

g++ -bundle -undefined dynamic_lookup -g -arch x86_64 -headerpad_max_install_names 
    -arch x86_64 build/temp.macosx-10.6-x86_64-2.7/root_numpy/src/_librootnumpy.o 
    -o build/lib.macosx-10.6-x86_64-2.7/root_numpy/_librootnumpy.so 
    -L/Users/bwells/bin/root/lib -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d 
    -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread 
    -lpthread -Wl,-rpath,/Users/bwells/bin/root/lib -stdlib=libc++ -lm -ldl 
    -lTreePlayer
g++: error: unrecognized command line option '-stdlib=libc++'
Run Code Online (Sandbox Code Playgroud)

当我使用标志编译"hello world"程序时会出现同样的问题:

dhcp-130-112:helloworld bwells$ g++ -stdlib=libc++ helloworld.cpp 
g++: error: unrecognized command line option '-stdlib=libc++'
Run Code Online (Sandbox Code Playgroud)

没有那个标志,它编译得很好:

dhcp-130-112:helloworld bwells$ g++ helloworld.cpp 
dhcp-130-112:helloworld bwells$ ls
a.out       helloworld.cpp
Run Code Online (Sandbox Code Playgroud)

我的编译器版本是:

dhcp-130-112:helloworld bwells$ g++ --version
g++ (MacPorts gcc48 4.8.2_2) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)

AKA运行的结果sudo port install gcc48.我的Mac OS版本是10.9.3.代码文件"helloworld.cpp"正如您所期望的那样

dhcp-130-112:helloworld bwells$ cat helloworld.cpp 

#include <iostream>

int main(void)
{
    std::cout << "Hello world!" << std::endl;
    return 0;
}
dhcp-130-112:helloworld bwells$ 
Run Code Online (Sandbox Code Playgroud)

问题:从我可以在互联网上收集的所有内容中," - stdlib = ..."标志是g ++的标准部分.包含它时为什么会出现g ++错误?我怎样才能解决这个问题?

注意: 在没有问题标志的情况下手动执行setup.py行,并允许完整包编译时,我尝试将生成的包导入python时遇到链接错误.我担心这里的g ++问题是一个更大问题的症状,这就是我试图直接解决它的原因.

T.C*_*.C. 15

-stdlib=libc++ 是一个Clang(不是GCC)选项,告诉clang使用LLVM libc ++标准库(这是Clang使用的)而不是GNU libstdc ++(这是GCC使用的).

由于您遇到了链接错误,您使用的其他软件包似乎可能是使用clang和libc ++编译的,这与ABCC不兼容GCC的libstdc ++(除了一些低级别的东西).因此,您还需要使用clang和libc ++编译包.Apple的Xcode附带了clang(这可能就是你想要用的),MacPorts也提供了许多clang发行版.