获得符合c ++ 11的编译器

gon*_*one 12 c++ macos gnu toolchain c++11

这一切似乎都是一个巨大的混乱.
我想要的只是一个实现C++ 11的编译器,所以我可以使用<chrono>.但是我从一开始就很困惑.

目前,我通过调用G ++来构建程序,但是当我检查版本时$ g++ -v,我得到:

gcc版本4.2.1(基于Apple Inc. build 5658)(LLVM build 2336.11.00)


这是怎么回事?我使用的是G ++吗?GCC?LLVM?我甚至不知道.它们是一样的吗?


所以现在我正在尝试通过gnu.org构建和下载GCC 4.7 ,但我不知道任何指南正在谈论什么.对于我不知道的事情,我从未见过这么多的首字母缩略词.

为什么这么复杂?什么是所有这些版本,其中一些只实现C++ 11的某些部分而不是其他部分?

Bil*_*nch 22

这是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)
Run Code Online (Sandbox Code Playgroud)

g ++运行llvm-gcc,它是gcc前端,然后是llvm后端.

clang ++正在运行clang,它是clang前端,然后是llvm后端.

如果您想在OS X上安装C++ 11编译器而不安装其他软件包,那么您唯一的选择就是使用clang编译器.

必要的标志是:

clang++ -stdlib=libc++ -std=gnu++11
Run Code Online (Sandbox Code Playgroud)

描述我正在经过的两面旗帜:

  • -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++和铿锵++意味着-stdlib=libc++.所以,对于Mavericks,如果你想使用C++ 11,你可以遵循上面的建议,或者只是做:

clang++ -std=gnu++11
Run Code Online (Sandbox Code Playgroud)

OS X 10.10的更新:从OS X Yosemite开始,g ++仍然是伪装的.但是,默认情况下不再使用libstdc ++.两者现在都在libc ++上.