¿Cuál es la diferencia? clang++ / clang-std=c++11


Había estado usando erróneamente este comando, que falló en el paso de enlace:

$ clang -std=c++11 -stdlib=libc++ myInputFile.cpp

¿Puede alguien explicar por qué clang proporciona una opción de lenguaje C++ y por qué no se enlaza? ¿Por qué las opciones -x c++ o -std=c++11 no logran lo mismo que clang++? ¡Gracias!

Author: djwbrown, 2013-11-18

2 answers

Técnicamente, ninguno de los programas llamados clang o clang++ es un compilador: ambos son controladores que analizan los argumentos de entrada y determinan qué compiladores/ensambladores/enlazadores invocar en qué archivos con qué argumentos de línea de comandos. La única diferencia entre los dos es que clang enlaza solo con la biblioteca estándar de C si realiza un enlace, mientras que clang++ enlaza con las bibliotecas estándar de C++ y C.

La opción -x=<language> anula los programas de controlador' heurística para determinar el lenguaje del archivo fuente, dirige al controlador a invocar el compilador para <language> independientemente.

La opción -std=<dialect> selecciona qué dialecto de un idioma en particular desea usar. Si necesita asegurarse de que su programa C++ es portable a un compilador C++98 antiguo, puede compilarlo con -std=c++98. -std solo se aplica al lenguaje de destino: no intentará compilar, por ejemplo, ensamblador o java como C++98, solo archivos de origen que el controlador cree que son C++.

En breve, hay dos programas de controladores diferentes para que sea fácil seleccionar con qué bibliotecas enlazar. Hay casos de uso razonables para compilar C++ pero no enlazar con la biblioteca estándar de C++.

 28
Author: Casey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-18 15:53:46

Clang es el nombre del compilador completo.

Sin embargo, desde el punto de vista de la línea de comandos:

  • Clang es el compilador de C
  • Clang++ es el compilador de C++ (como g++ es un compilador de C++, mientras que gcc es un compilador de C)

La opción-std=c++11 habilita el nuevo estándar C++11 (como en g++).

 3
Author: Claudio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-18 12:03:09