我想在Mac Terminal中编译C++11源代码,但是失败了。我尝试了g++ -std=c++11
,g++ -std=c++0x
,g++ -std=gnu++11
和g++ -std=gnu++0x
,但都不起作用。终端始终读取unrecognized command line option
。然而,g++ -std=gnu
和类似的东西工作得很好(当然C++11源代码不能通过)。
我应该使用哪个选项来启用C++11支持?
顺便说一句,我使用的命令行工具是安装在Xcode中的,我非常确定它们是最新的。
发布于 2013-01-09 13:52:39
正如其他人指出的那样,您应该使用clang++
而不是g++
。另外,您应该使用libc++库,而不是默认的libstdc++;包含的libstdc++版本非常旧,因此不包含C++11库特性。
clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp
如果您还没有安装Xcode的命令行工具,那么可以不使用xcrun
工具来运行编译器和其他工具。
xcrun clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp
此外,如果您想禁用某个特定的警告,可以将额外的标志传递给编译器来执行此操作。在警告消息的末尾,它会向您显示启用警告的最具体的标志。要禁用该警告,您可以在警告名称前面加上no-
。
例如,您可能不希望出现c++98兼容性警告。在这些警告的末尾,它显示标志-Wc++98-compat
,要禁用它们,您可以传递-Wno-c++98-compat
。
发布于 2013-01-09 13:47:29
XCode在编译时使用clang
和clang++
,而不是g++
(假设您没有自定义内容)。相反,请尝试:
$ 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扩展。
https://stackoverflow.com/questions/14228856
复制相似问题