¿Qué necesita instalar para usar Clang en Windows para compilar c++14 para 64 bits?


ACTUALIZACIÓN:

He escrito un tutorial detallado que incorpora las dos respuestas principales a esta pregunta: http://blog.johannesmp.com/2015/09/01/installing-clang-on-windows-pt1 /



TL;DR

En Windows, Dado el siguiente programa:

#include <iostream>

int main()
{
    int arr[] = {1, 2, 3, 4, 5};
    for(auto el : arr)
    {
        std::cout << el << std::endl;
    }
    return 0;
}

Quiero ser capaz de hacer lo siguiente:

clang++ hello.cpp -o hello.exe -std=c++14

Y obtener un ejecutable de 64 bits que sólo funciona. No quiero tener que añadir una tonelada de -I incluye a dile a clang dónde encontrar iostream u otros encabezados estándar de c++; no quiero tener que enlazar en varios pasos.

No me importa tanto el rendimiento, la eficiencia, qué enlazador se utiliza, etc. Solo quiero ser capaz de tener clang/gcc/lo que sea configurado correctamente para que pueda usar un solo, rápido y sucio, comando de consola como el de arriba.

¿Qué necesito instalar para que simplemente funcione?


El problema

Como un mac/linux predominantemente usuario Estoy acostumbrado a poder usar un gestor de paquetes para instalar la última versión de clang, que solo funciona.

Ahora estoy tratando de configurar el compilador clang / gnu en Windows y parece ser mucho más difícil, aunque solo sea porque hay poca o ninguna documentación sencilla por ahí (que he sido capaz de encontrar)

He intentado seguir este tutorial: https://yongweiwu.wordpress.com/2014/12/24/installing-clang-3-5-for-windows - y fue capaz de úselo para hacer que clang construya y enlace (usando gcc 4.8.2), pero los binarios resultantes eran de 32 bits.

He intentado instalar los últimos binarios precompilados de clang (3.6.2) y la versión de 64 bits de mingw-w64 (4.9.3 para 64 bits con posix y sjlj para excepciones ), y estoy obteniendo:

hello.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
         ^
1 error generated.

Lo que parece indicar que clang no está viendo los archivos de gcc. Parece que algunas versiones de LLVM / clang están buscando solo ciertas versiones de gcc, pero eso no ¿parecen estar documentados en alguna parte?

Del mismo modo alguien me mencionó en el IRC LLVM que necesita modificar el controlador de clang para buscar gcc en ciertas rutas?


Lo que estoy buscando

Estoy bien con construir LLVM / Clang desde el código fuente si es necesario, pero realmente solo estoy buscando instrucciones claras y paso a paso que me permitan usar clang++ tan fácilmente como puedo hacerlo con mac/linux

Algo como:

  1. Build this version of LLVM / Clang and colóquelo en that directory
  2. Descargue e instale this version de cygwin (o mingw32 o mingw-w64) e instale these packages.
  3. etc..
Author: Johannes, 2015-08-27

3 answers

Si utiliza la próxima clang 3.7.0, simplemente establezca la RUTA para incluir el bin de mingw-w64, clang funcionará como espera

 9
Author: user5271266,
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
2015-08-27 05:27:05

Intente instalar MSYS2 y luego instale el paquete mingw-w64-x86_64-clang (binario):

pacman -S mingw-w64-x86_64-clang

Es un poco viejo en este momento (3.6.2), pero podría ser lo suficientemente bueno para usted. Luego, cuando ejecute el shell Win64 proporcionado por MSYS2, clang estará en su ruta.

Si no es lo suficientemente bueno, recientemente he estado construyendo una versión de 64 bits de clang con MSYS2 y usándola para compilar ejecutables nativos de Windows de 64 bits. Mi proceso fue algo así como:

  1. Uso pacman para instalar base-devel, mingw-w64-x86_64-ninja, mingw-x86_64-cmake y quizás algunos otros paquetes que son necesarios para el proceso de compilación.
  2. Grab mi script PKGBUILD para clang y los archivos en el mismo directorio. Esto se basa en el paquete mingw-w64-clang-svn de MSYS2, que es en gran parte el trabajo de Martell Malone. Puedes encontrarlo en el canal IRC MSYS2 y preguntarle más al respecto.
  3. En un Win64, shell, ir al directorio con mi PKGDUILD, ejecutar export MINGW_INSTALLS=mingw64 (por lo que solo está compilando la versión de 64 bits), y luego ejecute makepkg-mingw.

Es poco probable que consiga todo bien en el primer intento, y algunos archivos pueden necesitar ser editados. Clang puede haber cambiado desde la última vez que hice esto y algunos parches pueden no aplicarse limpiamente.

 12
Author: David Grayson,
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
2015-08-27 01:21:13

Puede instalar el binario de prelanzamiento llvm para Windows aquí. MinGW-w64 se puede descargar aquí . Por supuesto, debe asegurarse de que las rutas estén configuradas correctamente.

Para la última versión de clang, por ejemplo, clang 6.0.0. La solución anterior de @user5271266 no será suficiente. Ahora el destino predeterminado para clang Windows es x86_64-pc-windows-msvc (Supongamos que está utilizando Windows de 64 bits).

Para compilar archivos fuente de C++, de acuerdo con aquí , debemos cambiar meta:

clang++ -target x86_64-pc-windows-gnu -std=c++14 test.cc -o test.exe
 0
Author: jdhao,
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
2018-03-29 10:16:11