libc ++ - 停止std重命名为std :: __ 1?

时间:2012-01-25 10:05:38

标签: c++ clang std libc++

经过大量努力,让clang和libc ++编译,运行,与NetBeans集成,甚至交叉编译到32位机器,我想我已经弄明白了!所以我去使用libstdc ++没有的一些功能(将我的开发环境颠倒过来的全部原因),并发现......我实际上无法做到这一点。

安装了libc ++,它可以工作,并且编译后的程序(当它工作时)确实需要它。但是,编译器仍然试图通过搞乱命名空间来抓住每个机会使用libstdc ++版本; std::__1::mapstd::__1::basic_string,依此类推。现在,我从this question知道为什么会发生这种情况,以及为什么libc ++会这样做。我只需要知道如何删除它,因为它完全不适用 - 我真的,确实想要使用libc ++版本,并且我的代码中没有任何内容需要这两种类型共存。

我已经尝试将libstdc ++文件夹从include路径中取出,并且失败了,这使得它们完全无法访问。没运气。我没有使用任何附加库,只使用内置的Linux / POSIX头文件(errno,socket,syslog,fcntl)。

编辑:错误讯息:

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 个答案:

答案 0 :(得分:2)

来自评论:

  

<强> araqnid:   您的NetBeans调用没有-std=c++0x,是否不需要? std::map::emplace是一种C ++ 11方法。

     

DigitalMan(OP):   @araqnid实际上是这样做的! Clang抱怨说这个论点未被使用 - 事实上,即使它被使用和需要,它仍然存在 - 所以我把它从NetBeans配置中取出。当然,错误的警告胜过完整的错误。