首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Mac终端上编译支持C++11的C++

如何在Mac终端上编译支持C++11的C++
EN

Stack Overflow用户
提问于 2013-01-09 13:34:50
回答 2查看 97.6K关注 0票数 74

我想在Mac Terminal中编译C++11源代码,但是失败了。我尝试了g++ -std=c++11g++ -std=c++0xg++ -std=gnu++11g++ -std=gnu++0x,但都不起作用。终端始终读取unrecognized command line option。然而,g++ -std=gnu和类似的东西工作得很好(当然C++11源代码不能通过)。

我应该使用哪个选项来启用C++11支持?

顺便说一句,我使用的命令行工具是安装在Xcode中的,我非常确定它们是最新的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-09 13:52:39

正如其他人指出的那样,您应该使用clang++而不是g++。另外,您应该使用libc++库,而不是默认的libstdc++;包含的libstdc++版本非常旧,因此不包含C++11库特性。

代码语言:javascript
复制
clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp

如果您还没有安装Xcode的命令行工具,那么可以不使用xcrun工具来运行编译器和其他工具。

代码语言:javascript
复制
xcrun clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp

此外,如果您想禁用某个特定的警告,可以将额外的标志传递给编译器来执行此操作。在警告消息的末尾,它会向您显示启用警告的最具体的标志。要禁用该警告,您可以在警告名称前面加上no-

例如,您可能不希望出现c++98兼容性警告。在这些警告的末尾,它显示标志-Wc++98-compat,要禁用它们,您可以传递-Wno-c++98-compat

票数 108
EN

Stack Overflow用户

发布于 2013-01-09 13:47:29

XCode在编译时使用clangclang++,而不是g++ (假设您没有自定义内容)。相反,请尝试:

代码语言:javascript
复制
$ cat t.cpp
#include <iostream>

int main()
{
    int* p = nullptr;
    std::cout << p << std::endl;
}
$ clang++ -std=c++11 -stdlib=libc++ t.cpp
$ ./a.out 
0x0

感谢bames53指出我遗漏了-stdlib=libc++

如果您想使用一些GNU扩展(也使用C++11),您可以使用-std=gnu++11而不是-std=c++11,这将打开C++11模式并保持启用GNU扩展。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14228856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档