После значительных усилий, чтобы 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