如何在Mac终端上编译支持c++ 11的c++
How to compile C++ with C++11 support in Mac Terminal
我想在Mac终端中编译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中的,我很确定它们是最新的。
正如其他人指出的那样,您应该使用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
禁用它们。
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扩展的启用。
- 编译时未启用intel oneApi CUDA支持
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用CMake检测支持的C++标准
- 为什么istream不支持右值提取
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 扩展光电二极管探测器以支持多个传感器
- MSVC是否支持C++11样式的属性而不是__declspec
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- 哪个C++规范开始支持 std::vector
- 如何检测VS C++编译器是否支持C++11?
- CertGetCertificateChain 具有支持的内存存储和证书信任列表
- Casablanca/cpprestsdk listener.support接受函数,但不支持方法
- 将 IPv6 支持添加到雨量计
- 为什么C++不支持对未初始化变量进行智能分析?
- LMDB 是否支持随机读取?
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 在 Ubuntu 18.04 上编译 GLSL 着色器时"不支持 GLSL 3.30"?
- 如何在多写入器情况下对文件支持的共享内存中的大页面出错