¿Cómo compilo C ++ con Clang?

97

He instalado Clang usando apt-get en Ubuntu, y puedo compilar con éxito archivos C usándolo. Sin embargo, no tengo idea de cómo compilar C ++ a través de él. ¿Qué necesito hacer para compilar C ++?

pitónico
fuente

Respuestas:

147

El comando clanges para C y el comando clang++es para C ++.

adl
fuente
48

Además, para la posteridad, Clang (como GCC) acepta el -xcambio para establecer el idioma de los archivos de entrada, por ejemplo,

$ clang -x c++ some_random_file.txt

Este hilo de la lista de correo explica la diferencia entre clangy clang++bueno: Diferencia entre clang y clang ++

Kim Gräsman
fuente
4
Tuve un error de enlazador con clang -x c ++ cuando compilé el archivo cpp con #include <iostream>. -lstdc ++ flag resolvió este problema.
Eslavo
1
Ahora tengo el código fuente de Clang frente a mis ojos. Durante la compilación (en Windows), primero compila clang.exey luego copia ese ejecutable en clang++.exe. Entonces es el mismo ejecutable, solo en tiempo de ejecución verifica su propio nombre para distinguir si se comporta como un compilador C o C ++. HTH.
Serge Rogatch
Como nota, la opción -x c++era muy útil para dar como -extra-argpara sonido metálico-ordenado , para que la fuerza para tratar un archivo .h contiene C ++ en lugar de C.
Ad N
Esto es demasiado limitante para ser realmente útil a menos que construya todo desde la fuente. Es mejor usar clang++y dejar que detecte qué tipo de archivos le proporcionas. Cuando un proyecto puede contener .cpparchivos, .llarchivos (llvm IR) y .o, .a, .soy lo que no los archivos de bibliotecas de terceros, clang -x c++se acaba de vomitar.
Sahsahae
47

No sé por qué no hay una respuesta que aborde directamente el problema. Cuando desee compilar un programa en C ++, es mejor usar clang++. Por ejemplo, lo siguiente me funciona:

clang++ -Wall -std=c++11 test.cc -o test

Si se compila correctamente, producirá el archivo ejecutable test, y puede ejecutar el archivo usando ./test.

O simplemente puede usar clang++ test.ccpara compilar el programa. Producirá un archivo ejecutable predeterminado llamado a.out. Úselo ./a.outpara ejecutar el archivo.

Todo el proceso es muy parecido a g ++ si está familiarizado con g ++. Vea esta publicación para verificar qué advertencias se incluyen con la -Wallopción. Esta página muestra una lista de indicadores de diagnóstico compatibles con Clang.

jdhao
fuente
4
Gracias por responder la pregunta.
Curyous
4

Tuve un problema similar al compilar Clang desde la fuente (pero no con sudo apt-get install. Esto podría depender de la versión de Ubuntu que esté ejecutando).

Podría valer la pena comprobar si clang++puede encontrar las ubicaciones correctas de sus bibliotecas de C ++:

Compare los resultados de g++ -v <filename.cpp>y clang++ -v <filename.cpp>, en "#include <...> la búsqueda comienza aquí:".

Guy Adini
fuente
0

solución 1:

  clang++ your.cpp

solución 2:

  clang your.cpp -lstdc++

solución 3:

   clang -x c++ your.cpp 
ligando
fuente