如何在 Mac 终端中使用 C++11 支持编译 C++
Posted
技术标签:
【中文标题】如何在 Mac 终端中使用 C++11 支持编译 C++【英文标题】:How to compile C++ with C++11 support in Mac Terminal 【发布时间】:2012-12-23 02:59:33 【问题描述】:我想在 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 中,我很确定它们是最新的。
【问题讨论】:
Xcode 附带的 GCC 不是 最新的,实际上它是古老的。试试clang++
。
@H2CO3 酷,完美运行。谢谢。然而,clang++
警告我 C++11 的特性...有什么选项可以关闭这些警告吗?
使用-w
选项关闭所有警告。
要使用的调试器是lldb
【参考方案1】:
正如其他人指出的那样,您应该使用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
。
【讨论】:
刚刚测试了你说的。事实上,一个简单的std::array
会淘汰默认的libstdc++
。
是的,在没有 -stdlib=libc++
的情况下编译 std::is_heap()
时出现问题
我还必须:-mmacosx-version-min=10.7【参考方案2】:
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 扩展。
【讨论】:
不确定 -1 的用途...如果是因为我遗漏了-stdlib=c++
,如果能发表评论,我可以更快地修复它!以上是关于如何在 Mac 终端中使用 C++11 支持编译 C++的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Mac OS X 终端上使用 make 编译 C 程序
linux如何查看编译器支持的C++版本(支持C++11支持C++14支持C++17支持C++20)(编译时不指定g++版本,默认使用老版本编译)
linux如何查看编译器支持的C++版本(支持C++11支持C++14支持C++17支持C++20)(编译时不指定g++版本,默认使用老版本编译)