C++ LLVM C和x2B的标准库+;和GNU C++;有不同的标题

C++ LLVM C和x2B的标准库+;和GNU C++;有不同的标题,c++,xcode,llvm,gnu,c++-standard-library,C++,Xcode,Llvm,Gnu,C++ Standard Library,我必须使用unordered_map和trie,但不是一个标准库,也不是另一个包含这两个库 // works only with LLVM library #include <unordered_map> // works only with GNU library #include <ext/pb_ds/assoc_container.hpp> //仅适用于LLVM库 #包括 //仅适用于GNU库 #包括 我的意思是,上面描述的 该程序是在Xcode 7.2.1中构

我必须使用
unordered_map
trie
,但不是一个标准库,也不是另一个包含这两个库

// works only with LLVM library
#include <unordered_map>
// works only with GNU library
#include <ext/pb_ds/assoc_container.hpp>
//仅适用于LLVM库
#包括
//仅适用于GNU库
#包括
我的意思是,上面描述的

该程序是在Xcode 7.2.1中构建的。我尝试过使用GNUC++14、GNUC++11和C++14、C++11,但都没有用

如何解决这个问题?也许,我的GNU库太旧了,我可以用Xcode更新它吗?或者,LLVM有
assoc_container.hpp
是其他路径吗?

是C++11标准的产物,并非所有编译器都使用C++11(或更高版本)作为标准,这意味着在构建时必须添加标志才能使用它

当使用5.1之前的GCC版本构建时,您应该添加标志
-std=c++11
(或者如果您想要GCC扩展,可以选择
-std=gnu++11
,或者如果您有一个非常旧的GCC版本,则添加标志)。

的实现是c++11的一个要求。这表明您正在使用较旧版本的
stdlibc++

如果您仍然使用该版本,Boost提供了一个您可以使用的解决方案

<>你不能指望LIbc++(Clang的C++库)有GNU扩展。但是,您可以在同一可执行文件(但不是编译单元)中混合和匹配
libstc++
libc++
,因为后者使用内联名称空间,这意味着其符号不会与前者冲突

编辑:

似乎OP是使用最新版本的clang在MacOSX上编译的

在这种情况下,工具链附带的
libstd++
是一个没有C++11支持的陈旧版本。就苹果而言,它是不受欢迎的

最好的选择是:修改代码以避免使用
libstdc++
中的扩展,这在任何情况下都会出现在C++11的预发布功能中
或者:使用这两个库构建(是的,这在MacOSX和iOS上是完全可能的)。这里需要注意的是,您只能在任何编译单元中使用其中一个。

@AivanF。然后,请编辑您的问题,向我们展示您是如何构建程序的,您有哪些标志,您有哪些IDE项目设置。请运行
gcc--version
,以便我们可以看到您得到了什么。同样的选项也适用于clang。@marko说:Apple LLVM版本7.0.2(clang-700.1.81)目标:x86_64-Apple-darwin14.5.0线程模型:OSX上的posix
gcc
是指向
clang
ok的符号链接。你正在使用MacOSX。如果您使用的是libstdc++,那么它将停留在不支持C++11的旧版本上——我相信是出于许可的原因。就苹果而言,在MacOSX上使用libstdc++是不推荐的。您可能需要更新GNU stdlibc++。您可以使用macports或自制软件。