Нераспознанная опция командной строки '- stdlib=libc++ ' с MacPorts gcc48

контекст

Я пытаюсь скомпилировать пакет "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++'

та же проблема возникает, когда я компилирую программу "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 line без проблем работает флаг, и позволяет компилировать полный пакет, я испытываю ошибки связывания при попытке импортировать полученный пакет в python. Я обеспокоен тем, что проблема g++ здесь является симптомом большей проблемы, поэтому я пытаюсь решить ее напрямую.

1 ответов


-stdlib=libc++ является опцией Clang (не GCC) и говорит clang использовать стандартную библиотеку LLVM libc++ (что и использует Clang), а не GNU libstdc++ (что и использует GCC).

поскольку вы получили ошибки связывания, кажется вероятным, что другие пакеты, которые вы используете, были скомпилированы с clang и libc++, который не совместим ABI с libstdc++ GCC (за исключением некоторых низкоуровневых вещей). Таким образом, вам нужно будет скомпилировать пакет с clang и libc++. Xcode от Apple поставляется с clang (что, вероятно, то, что вы хотели бы использовать для этого), и MacPorts также предоставляет ряд дистрибутивов clang.