如何在Mac Terminal中用C ++ 11编译C ++
我想在Mac Terminal中编译C ++ 11源代码,但是失败了。 我试过g++ -std=c++11
, g++ -std=c++0x
, g++ -std=gnu++11
和g++ -std=gnu++0x
但是没有任何工作。 terminal总是读取unrecognized command line option
。 但是, g++ -std=gnu
和类似的东西工作正常(当然C ++ 11源代码无法通过)。
我应该使用哪个选项来启用C ++ 11支持?
顺便说一句,我使用的命令行工具是安装在Xcode,我敢肯定,他们是最新的。
正如其他人指出,你应该使用clang++
而不是g++
。 另外,您应该使用libc ++库而不是默认的libstdc ++; 包含的libstdc ++版本相当陈旧,因此不包含C ++ 11库function。
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
。
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扩展启用。