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 ++上.