如何获得-std = c ++ 11 w / libstdc ++?

时间:2016-01-11 19:21:14

标签: c++ c++11 clang libstdc++ libc++

为什么这不起作用:

#include <regex>
int main() {
   return 0;
}

编译为:

clang++ -std=c++11 -stdlib=libstdc++ temp.cpp
temp.cpp:1:10: fatal error: 'regex' file not found
#include <regex>
         ^
1 error generated.


clang++ --version
Apple LLVM version 7.0.0 (clang-700.1.76)
Target: x86_64-apple-darwin14.5.0
Thread model: posix

如果我允许stdlib成为libc++,那么它就会编译。正则表达式为c++11,但clang本身似乎没有问题-std=c++11 -stdlib=libstdc++。至少在我的机器上,看起来我可以在/usr/include/regex.h中使用,但这不是标准的,除了我想使用的正则表达式以外的东西(例如std :: to_string)。

之所以出现这种情况,是因为我想链接到第三方库(我没有源代码),该库被编译为std::string而不是std::__1::basic_string,但我的代码使用std::regexstd::to_string。我不确定是否要引入对boost的依赖。

2 个答案:

答案 0 :(得分:5)

Apple发布了一个非常旧版本的libstdc ++和OS X(我认为是4.2.1)。该版本并不完全支持C ++ 11,因此您需要使用较新版本才能使用std::regex

答案 1 :(得分:2)

OS X附带的libstdc ++版本来自gcc-4.2.1,这是在FSF决定采用GPL3之前GCC的最后一个版本。 Apple在OS X Lion中弃用了libstdc ++,转而使用LLVM Project中的libc ++。如果要在OS X上使用C ++ 11,则应使用-std=c++11 -stdlib=libc++