这是 OS X 上的情况。
默认安装了两个 C++ 编译器。
[5:49pm][wlynch@watermelon ~] g++ --version
i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
[5:49pm][wlynch@watermelon ~] clang++ --version
Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
g++ 正在运行 llvm-gcc,它是 gcc 前端,然后是 llvm 后端。
clang++ 正在运行 clang,它是 clang 前端,然后是 llvm 后端。
如果你想在 OS X 上使用 C++11 编译器而不安装其他包,你唯一的选择是使用 clang 编译器。
必要的标志是:
clang++ -stdlib=libc++ -std=gnu++11
描述我传递的两个标志:
-stdlib=libc++
使用 libc++ 标准库,而不是 gnu libstdc++。在 OS X 上,libc++ 版本支持 c++11。gnu libstdc++ 没有。
-std=gnu++11
告诉编译器支持 c++11 代码特性,比如 lambdas 和 enum 类。你也可以通过-std=c++11
,它是类似的,但不启用一些通常预期的 gnu 扩展。
OS X 10.9 更新:从 OS X Mavericks 开始,g++ 和 clang++ 实际上都在使用 clang。唯一的区别是 g++ 将暗示-stdlib=libstdc++
而 clang++ 将暗示-stdlib=libc++
. 所以,在 Mavericks 上,如果你想使用 C++11,你可以遵循上面的建议,或者只是这样做:
clang++ -std=gnu++11
OS X 10.10 更新:从 OS X Yosemite 开始,g++ 仍然是伪装的。但是,默认情况下都不再使用 libstdc++。两者现在都在 libc++ 上。