Нераспознанный параметр командной строки ‘-stdlib = libc ++’ с MacPorts gcc48

контекст

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

9

Решение

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

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

12

Другие решения


По вопросам рекламы [email protected]