c++ - compiler - g++
Cómo compilar C++ con soporte C++ 11 en Mac Terminal (2)
Quería compilar el código fuente de C ++ 11 dentro del Mac Terminal pero fallé. Intenté g++ -std=c++11
, g++ -std=c++0x
, g++ -std=gnu++11
y g++ -std=gnu++0x
pero nada funcionó. El terminal siempre lee la unrecognized command line option
. Sin embargo, g++ -std=gnu
y cosas así funcionaron bien (por supuesto, el código fuente de C ++ 11 no pudo pasar).
¿Qué opción debo usar para activar el soporte de C ++ 11?
Por cierto, la herramienta de línea de comandos que estoy usando está instalada dentro de Xcode, y estoy bastante seguro de que están actualizados.
Como otros han señalado, debes usar clang++
lugar de g++
. Además, debe usar la biblioteca libc ++ en lugar de la libstdc ++ predeterminada; La versión incluida de libstdc ++ es bastante antigua y, por lo tanto, no incluye las características de la biblioteca C ++ 11.
clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp
Si no ha instalado las herramientas de línea de comando para Xcode, puede ejecutar el compilador y otras herramientas sin hacer eso usando la herramienta xcrun
.
xcrun clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp
Además, si hay una advertencia particular que desea deshabilitar, puede pasar indicadores adicionales al compilador para hacerlo. Al final de los mensajes de advertencia, le muestra el indicador más específico que habilitaría la advertencia. Para desactivar esa advertencia, anteponga no-
al nombre de advertencia.
Por ejemplo, probablemente no quiera las advertencias de compatibilidad de c ++ 98. Al final de esas advertencias muestra el indicador -Wc++98-compat
y para deshabilitarlas se pasa -Wno-c++98-compat
.
XCode usa clang
y clang++
al compilar, no g++
(suponiendo que no haya personalizado cosas). En cambio, intente:
$ 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
Gracias a la respuesta de bames53 por señalar que me había salido -stdlib=libc++
.
Si desea usar algunas extensiones de GNU (y también utiliza C ++ 11), puede usar -std=gnu++11
lugar de -std=c++11
, que activará el modo C ++ 11 y también mantendrá Extensiones GNU habilitadas