使用MacPorts的gcc48时出现未识别的命令行选项'-stdlib=libc++'

13

背景

我正在尝试编译软件包“root_numpy”,它是科学分析软件“root”和Python软件包“numpy”之间的链接。 它作为root包装器“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++'

当我使用标志编译“hello world”程序时,会遇到相同的问题:

dhcp-130-112:helloworld bwells$ g++ -stdlib=libc++ helloworld.cpp 
g++: error: unrecognized command line option '-stdlib=libc++'

没有该标志,它可以顺利编译:

dhcp-130-112:helloworld bwells$ g++ helloworld.cpp 
dhcp-130-112:helloworld bwells$ ls
a.out       helloworld.cpp

我的编译器版本是:

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.

这是运行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$ 

问题:从我在互联网上了解到的所有内容来看,“-stdlib = ...”标志是g ++的标准部分。为什么我在包含它时会得到一个g ++错误?我该如何解决这个问题?

注:虽然手动执行没有问题标志的setup.py行可以使整个包编译,但当我尝试将生成的包导入Python时,我遇到链接错误。我担心这里的g ++问题是更大问题的症状,这就是我试图直接解决它的原因。


4
那是一个 clang 的选项... - T.C.
选项不是std=吗?例如std=libc++ - IllusiveBrian
1
@Namfuak,"-std =" 是用于 C++ 语言版本的(例如,C++11)。 - chris
1
@Namfuak 不是:-std=c++11 - πάντα ῥεῖ
1
有等效的g++选项吗?我很困惑安装脚本没有识别编译器版本... - user3777020
1个回答

15

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

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


我们在安装文档中对此发出了警告:http://rootpy.github.io/root_numpy/install.html - ndawe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接