После значительных усилий по компиляции, запуску, интеграции с 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, CacheEntry, std::__1::less >, std::__1::allocator, 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