¿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!
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++.
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++).
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