libc ++ - остановить переименование std в std :: __ 1? - PullRequest
10 голосов
/ 25 января 2012

После значительных усилий, чтобы clang и libc ++ компилировались, запускались, интегрировались с NetBeans и даже кросс-компилировались на 32-битной машине, я подумал, что все это выяснил!Поэтому я собираюсь использовать некоторые функции, которых не было в libstdc ++ (полная причина перевернуть мою среду разработки с ног на голову), и обнаружить ... Я не могу этого сделать.

libc ++ установлен, онработает, и скомпилированная программа (когда она работает) требует этого.Тем не менее, компилятор по-прежнему пытается использовать версии libstdc ++ при каждой возможности, путаясь с пространством имен;std::__1::map, std::__1::basic_string и т. Д.Теперь я знаю из этого вопроса , почему это происходит и почему libc ++ делает это.Мне просто нужно знать, как стереть это, потому что это совершенно неприменимо - я действительно, действительно хочу использовать версии libc ++, и в моем коде нет ничего, что требовало бы сосуществования двух типов.

Я попытался удалить папки libstdc ++ из пути включения и, в результате, сделал их полностью недоступными.Неудачно.Я не использую никаких дополнительных библиотек, только встроенные заголовки Linux / POSIX (errno, socket, syslog, fcntl).

EDIT: Сообщение об ошибке:

CoreCache.cpp:61:12: error: no member named 'emplace' in 'std::__1::map<std::__1::basic_string<char>, CacheEntry, std::__1::less<std::__1::basic_string<char> >, std::__1::allocator<std::__1::pair<const std::__1::basic_string<char>, CacheEntry> > >'

Карта libstdc ++ не имеет emplace ().Версия libc ++ делает .

Кажется, что работает следующий вызов из командной строки:

clang++ -o stachecache -I /usr/local/lib/clang/3.1/include/ -I /usr/include/c++/v1/ -std=c++0x -stdlib=libc++ ./*.cpp

Вызов из NetBeans не выполняется:

clang++ -stdlib=libc++ -O3   -c -O3 -Werror -MMD -MP -MF build/Release/clang-Linux-x86/CoreCache.o.d -o build/Release/clang-Linux-x86/CoreCache.o CoreCache.cpp

1 Ответ

2 голосов
/ 28 января 2012

Из комментариев:

araqnid: Ваш вызов NetBeans не имеет -std=c++0x, он не нужен? std::map::emplace - это метод C ++ 11.

DigitalMan (OP): @araqnid Это действительно сделало это! Кланг пожаловался на то, что этот аргумент не используется - и до сих пор остается, даже если он используется и требуется - поэтому я вынул его из конфигурации NetBeans. Ошибочное предупреждение лучше, чем полная ошибка, конечно.

...