mac c ++编译器找不到<tr1 unordered_map =“”>

时间:2017-02-03 18:18:58

标签: c++ macos

我想当天的问题是&#34;&#34; c ++编译器是mac的默认设置吗?

如果我xcrun -find c++它会在/Applications/Xcode.app/etc...中说出来。

当我在Xcode目录中搜索tr1/unordered_map时,它就在那里。

所以我很困惑。为什么我收到fatal error: 'tr1/unordered_map' file not found的构建错误?

1 个答案:

答案 0 :(得分:19)

简答:使用-stdlib=libstdc++调用clang ++,tr1标题将在那里。

答案很长: 你的错误和2套C ++包含的原因是macOS / Xcode有两个不同的C ++标准库你可以构建:旧的GNU libstdc++,以及新的和现代的LLVM libc++。 / p>

自macOS 10.12 Sierra起,默认为libc++libstdc++已弃用。 libstdc++已经过时了,v4.2.1,并且早于C ++ 11(因此tr1标题)。如果您将长期使用此代码,那么至少值得让它符合C ++ 11标准(即#include <unordered_map>

更新:Xcode 10不再允许针对libstdc ++进行构建。更新代码库以使用标准C ++ 11标头,或者使用Xcode 9,如果这不是一个选项。