LLVM C++ 和 GNU C++ 的标准库有不同 headers
Standard libraries of LLVM C++ and GNU C++ have different headers
我必须使用 unordered_map
和 trie
,但不是一个标准库,也不是另一个包含它们的标准库。
// works only with LLVM library
#include <unordered_map>
// works only with GNU library
#include <ext/pb_ds/assoc_container.hpp>
我的意思是 GCC GNU website.
上有描述
该程序正在 Xcode 7.2.1 中构建。我尝试过使用 GNU C++14、GNU C++11 和 C++14、C++11,但没有用。
这个问题怎么解决?可能是我的 GNU 库太旧了,我可以在 Xcode 更新它吗?或者,也许 LLVM 有 assoc_container.hpp
是其他路径?
std::unordered_map
与 C++11 标准一起出现,并非所有编译器都使用 C++11(或更高版本)作为标准,但这意味着您必须在构建时添加标志才能使用它.
当使用 5.1 之前的 GCC 版本构建时,您应该添加标志 -std=c++11
(如果您想要 GCC 扩展,则可以选择 -std=gnu++11
,如果您有一个非常旧的版本,则可以添加 -std=c++0x
海湾合作委员会)。
std::unordered_map
的实现是 C++11 的要求。这表明您使用的是 stdlibc++
的旧版本。
如果您坚持使用该版本,Boost 提供了一个您可以使用的 implementation。
您不能期望 libc++(Clang 的 C++ 库)具有 GNU 扩展。但是,您可以在同一个可执行文件(但不是编译单元)中混合和匹配 libstc++
和 libc++
,因为后者使用内联名称空间,这意味着它的符号不会与前者冲突.
编辑:
似乎 OP 正在使用最新版本的 clang 在 MacOSX 上编译。
在这种情况下,工具链附带的 libstd++
是一个不支持 C++11 的旧版本。就 Apple 而言,它已被弃用。
最好的选择是:修改代码以避免在 libstdc++
中使用扩展 - 在任何情况下这似乎都是 C++11 预发布功能
或者:使用两个库构建(是的,这在 MacOSX 和 iOS 上完全可行)。这里需要注意的是,您只能在任何编译单元中使用一个或另一个。
我必须使用 unordered_map
和 trie
,但不是一个标准库,也不是另一个包含它们的标准库。
// works only with LLVM library
#include <unordered_map>
// works only with GNU library
#include <ext/pb_ds/assoc_container.hpp>
我的意思是 GCC GNU website.
上有描述该程序正在 Xcode 7.2.1 中构建。我尝试过使用 GNU C++14、GNU C++11 和 C++14、C++11,但没有用。
这个问题怎么解决?可能是我的 GNU 库太旧了,我可以在 Xcode 更新它吗?或者,也许 LLVM 有 assoc_container.hpp
是其他路径?
std::unordered_map
与 C++11 标准一起出现,并非所有编译器都使用 C++11(或更高版本)作为标准,但这意味着您必须在构建时添加标志才能使用它.
当使用 5.1 之前的 GCC 版本构建时,您应该添加标志 -std=c++11
(如果您想要 GCC 扩展,则可以选择 -std=gnu++11
,如果您有一个非常旧的版本,则可以添加 -std=c++0x
海湾合作委员会)。
std::unordered_map
的实现是 C++11 的要求。这表明您使用的是 stdlibc++
的旧版本。
如果您坚持使用该版本,Boost 提供了一个您可以使用的 implementation。
您不能期望 libc++(Clang 的 C++ 库)具有 GNU 扩展。但是,您可以在同一个可执行文件(但不是编译单元)中混合和匹配 libstc++
和 libc++
,因为后者使用内联名称空间,这意味着它的符号不会与前者冲突.
编辑:
似乎 OP 正在使用最新版本的 clang 在 MacOSX 上编译。
在这种情况下,工具链附带的 libstd++
是一个不支持 C++11 的旧版本。就 Apple 而言,它已被弃用。
最好的选择是:修改代码以避免在 libstdc++
中使用扩展 - 在任何情况下这似乎都是 C++11 预发布功能
或者:使用两个库构建(是的,这在 MacOSX 和 iOS 上完全可行)。这里需要注意的是,您只能在任何编译单元中使用一个或另一个。