После значительных усилий, получающих clang и libC++ для компиляции, запуска, интеграции с NetBeans и даже кросс-компиляции на 32-битную машину, я думал, что все это выяснилось! Поэтому я перехожу к использованию некоторых функций, которые у libstdC++ не было (вся причина для перевертывания моей рабочей среды dev) и обнаружить ... Я не могу этого сделать.libC++ - остановить std переименовать в std :: __ 1?
libC++ установлен, он работает, и скомпилированная программа (когда она работает) действительно требует этого. Тем не менее, компилятор по-прежнему пытается использовать версии libstdC++ при каждой возможности, возиться с пространством имен; std::__1::map
, std::__1::basic_string
, и так далее. Теперь я знаю от this question, почему это происходит, и почему это делает libC++. Мне просто нужно знать, как обрезать, потому что это совершенно неприменимо - я действительно действительно хочу использовать версии libC++, и в моем коде нет ничего, что требовало бы сосуществования двух типов.
Я попытался взять папки libstdC++ из пути include и, в противном случае, сделал их полностью недоступными. Не повезло. Я не использую никаких дополнительных библиотек, только встроенные заголовки 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++ не устанавливать(). Версия 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
Фактически, 'std :: __ 1 :: map' находится в' libC++ '* not * в' libstdC++'. Не могли бы вы показать нам сообщение об ошибке? –
Я добавил ошибку в сообщение. Версия libC++ на карте имеет emplace(), но libstdC++ (попытка получить доступ через версию std :: __ 1 :: map) не работает. – DigitalMan
Не могли бы вы также использовать свою командную строку, чтобы проверить правильность настроек? (например, stdlib, например: «clang ++ -stdlib = libC++») –