Cómo hacer que Clang funcione en Windows


He seguido la siguiente guía paso a paso y he logrado, después de un poco de jugueteo, hacer que clang compile usando code:blocks y MinGW. Genial, así que ahora podría agregar el módulo Clang a eclipse (por qué tener un IDE cuando puedes tener cuatro) y comenzar a compilar.

Puedo compilar un programa simple que no usa la biblioteca estándar, pero desafortunadamente cuando intento compilar esto:

#include <iostream>
using namespace std;

int main()
{
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    return 0;
}

En primer lugar entiendo esto:

..\src \ test.cpp: 9: 10: error fatal: archivo 'iostream' no encontrado

Así que agrego los encabezados Mingw a la ruta de inclusión; entonces obtengo esto:

'fatal error: 'bits/c++config.h' archivo no encontrado '

Lo cual es raro. ¿Por qué funciona MinGW si ese archivo no está en 'bits/'? ¿Está integrado en el compilador?. No importa, encuentro una implementación y creo el archivo en ' bits/'.

Entonces tengo toda una tormenta de errores incluyendo los extraños que parece sugerir que Clang no implementa el preprocesador correctamente o de lo contrario mi comprensión del preprocesador es incorrecta.

C:\Program Files\CodeBlocks\MinGW\lib\gcc\mingw32\4.4.1\include\c++/cwchar:45:26: error: expected value in expression
#if _GLIBCXX_HAVE_WCHAR_H

Y muchos más así. En caso de que sea

#if defined(_GLIBCXX_HAVE_WCHAR_H) 

O

#ifdef _GLIBCXX_HAVE_WCHAR_H?

Si lo son, entonces las bibliotecas estándar MinGW están equivocadas.

Asumo que estoy equivocado al asumir que clang se puede dejar caer para reemplazar gcc y que no está diseñado para funcionar con las bibliotecas estándar de gnu. Cualquier confirmación o negación de esto, respaldado con ¡la evidencia sería bienvenida!

Entonces, ¿alguien tiene una manera infalible de obtener la compilación de clang en una PC con Windows? Hay una escasez de información en línea con respecto a clang y especialmente con respecto a Windows.

Estoy muy interesado en hacer que clang y LLVM funcionen, ya que suenan muy bien por lo que he leído. Cualquier ayuda sería apreciada.

Gracias.

Author: Name is carl, 2011-06-29

7 answers

Hay algunas instrucciones para construir clang en esta página (ocultas en la parte "Desarrollo Clang" de la barra lateral...). Para MinGW desea la sección llamada "En sistemas Unix-like". La única parte difícil es el paso 5, que le dice cómo configurar las rutas para la biblioteca estándar de C++. Estos deben añadirse al código en clang/lib/Frontend/InitHeaderSearch.cpp. En mi máquina terminó pareciendo así

// FIXME: temporary hack: hard-coded paths.
AddPath("/usr/local/include", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++/mingw32", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++/backward", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../include", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include-fixed", System, true, false, false);

¡Aunque no estoy seguro de que todos estos sean necesarios!

 20
Author: Mike Dinsdale,
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
2011-06-29 18:51:50

Dependiendo de su versión de MinGW (y por lo tanto la versión de gcc portada), las cabeceras pueden estar dispersas un poco...

En el archivo clang/lib/Frontend/InitHeaderSearch.cpp encontrará una serie de rutas codificadas. El problema es que cada versión es específica, así que si tu versión de MinGW no está ahí, entonces siéntete libre de agregarla (y pide que se integre en la línea principal de Clang publicando el parche en cfe-commit).

Personalmente lo corro en MinGW / msys con solo problemas menores (una serie de casos de prueba fallan porque mi shell msys mangles la entrada cuando hay : en...), aunque no he intentado usarlo desde CodeBlocks (estoy acostumbrado a la línea de comandos).

Si desea ayudar, Takumi está vigilando la integración de MinGW, Francois Pichet está liderando el trabajo de compatibilidad con encabezados VC++/MFC (ie es el principal contribuyente) y @rubenvb actualmente está tratando de insertar parches en libc++ para que funcione en Windows (libc++ aún no compila en Windows). Las 3 áreas son bonitas mucho independiente y requieren diferentes habilidades y conocimientos.

 5
Author: Matthieu M.,
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
2017-05-23 11:54:44

Tuve un problema similar. Usé los análogos de GCC 4.7 de las rutas especificadas por la respuesta de Mike Dinsdale y las especificé con la bandera '-isystem' (Clang 3.2 en la distribución mingw64 como fue construida por rubenvb) a todas mis futuras llamadas al ejecutable de clang (a través de scripts). Como estos directorios se especifican explícitamente como directorios de inclusión system , todas las advertencias potencialmente agotadoras generadas por ellos se suprimen automáticamente.

Tl; dr: el -isystem flag especifica system inclusion directories without recompilation in Clang

 5
Author: user,
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-06-14 08:18:05

Clang tiene ubicaciones de búsqueda codificadas, como se define en el archivo clang/lib/Frontend/InitHeaderSearch.cpp, cerca del comentario FIXME: temporary hack: hard-coded paths.

Hay una nota al respecto en esta página: http://clang.llvm.org/get_started.html

Así que obtenga las rutas de inclusión de su otro compilador (MinGW), y codifíquelas en Clang, y podría funcionar. (No estoy seguro de si el soporte de Windows de Clang está 100% allí todavía)

 4
Author: jalf,
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
2011-06-29 18:51:17

Tengo el mismo error con Fedora Linux. La solución sugerida era obtener una versión posterior de Clang (estaba usando 2.8) o incluso compilarlo desde el tronco. No lo he probado.

 1
Author: Nemanja Trifunovic,
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
2011-06-29 18:42:57

Windows 10 / VS 2017 / Clang 4.0.0 falta stdlib.h en el código C. Así es como lo resolví:

  • Abrir x86_x64 Cross Tools Command Prompt for VS 2015/2016/2017. Ejecutar clang aquí debería eliminar el error "missing headers".
  • Si aún no funciona, le faltan los encabezados y/o libs reales, ya que Clang deja estos específicos de la plataforma en VS o MinGW. Vaya a \Program Files (x86)\Windows Kits\10\Include\ y busque sus subdirectorios (si los hay) para stdlib.h y co. Si no se encuentra, tendrá que instalar la última Windows 10 SDK yendo a Visual Studio (instalador) y haciendo clic en Modificar para añadir paquetes.
 1
Author: Arcane Engineer,
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
2017-05-06 05:40:46

Cuando tuve el mismo problema, simplemente configuré Bloques de código para los directorios de inclusión correctos para mi configuración. Y utiliza-I con clang++ y todo ha estado funcionando muy bien hasta ahora.

 0
Author: Chawathe Vipul,
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-03-04 12:36:17