such solucion meaning error c++ c windows clang

c++ - solucion - install clang ubuntu



Cómo compilar Clang en Windows (4)

Consulte http://clang.llvm.org/get_started.html#buildWindows

He usado "Visual Studio 11 Win64" con cmake y funcionó con el VS Express para escritorio actualmente disponible.

También para lib estoy usando MinGW-W 64 y para archivos faltantes SUA. http://mingw-w64.sourceforge.net/ y http://www.suacommunity.com/

Para vincular .o compilado por clang ++ para usar con los binarios W 64 , uso -m i386pep con el enlazador ld nuevamente enviado dentro del entregable W 64 .

He estado tratando de encontrar una manera de hacer que Clang funcione en Windows pero tengo problemas. Obtengo que Clang compile con éxito, pero cuando intento compilar un programa tengo un montón de errores en los encabezados estándar.

Soy consciente de las excelentes versiones prebuilt de Clang de rubenvb , pero quiero compilarlo para mí. También estaba escuchando las charlas de GoingNative sobre el argot que decían que aún no tenía muy buen soporte de Windows. ¿Cómo puedo hacer que clang funcione en Windows?


Esto es lo que funcionó en mi entorno, en Windows 8.1, en general similar a las instrucciones de Seth, pero con herramientas más nuevas.

  1. Instalé MinGW 64 en C:/MinGW , para ser precisos, he usado la distro de STL .
  2. Instalé Python 3, acabo de sacar su última versión.
  3. Instalé CMake 3.0.2
  4. Cifre LLVM y Clang en Github y los cloné en mi máquina, colocando el repositorio de Clang en la carpeta llvm / tools / clang (la estructura se describe en la página oficial , solo muestran ejemplos con svn en lugar de git).
  5. Creé la carpeta "build" junto a la carpeta "llvm", y dentro de la carpeta "build" ejecuté este comando: cmake -G "MinGW Makefiles" -D"CMAKE_MAKE_PROGRAM:FILEPATH=C:/MinGW/bin/make.exe" -DCMAKE_BUILD_TYPE=Release ../llvm (por alguna razón, CMake no pudo encontrar el "make" automáticamente)
  6. Luego corrí "make" para construir realmente. La construcción tomó un par de horas.
  7. Después de eso, en otra carpeta he creado 1.cpp, que ejecuta una expresión lambda para imprimir "hi":

#include <iostream> int main() { []{ std::cout << "hi"; }(); }

  1. También he creado un archivo cmd para compilar el cpp. Alternativamente, simplemente puede configurar la variable PATH correctamente a través de otros medios. Tenga en cuenta que GCC vesrion en su paquete de MinGW puede ser diferente. También Clang tiene algunas rutas integradas que intenta, pero están vinculadas a versiones específicas de GCC, y la mía no estaba entre ellas, así que tuve que proporcionar las rutas de inclusión explícitamente.

set PATH=<path to the build folder from step 5>/bin;c:/mingw/bin;%PATH% clang++ -std=c++11 1.cpp -o 1.exe -I"C:/MinGW/include" -I"C:/MinGW/include/c++/4.9.1" -I"C:/MinGW/include/c++/4.9.1/x86_64-w64-mingw32" -I"C:/MinGW/x86_64-w64-mingw32/include"

  1. Ejecutando ese cmd compilado 1.cpp en 1.exe que imprimió "hola".

Lo que no funcionó :

  1. He intentado construir las mismas fuentes de cvl + llvm sin MinGW + GCC usando el compilador MSVC de VS 2015 CTP. Construyó Clang con éxito, la única diferencia es que debe hacerlo desde la ventana de Developer CMD, y tendría que ejecutar cmake -G "Visual Studio 12" ../llvm y luego compilar la solución en Visual Studio. Sin embargo, ese Clang no compiló un cpp de muestra, se quejó del "identificador no declarado ''char16_t''" y "__int128 no es compatible con este objetivo" dentro de los encabezados de biblioteca estándar de MinGW. Si uso los encabezados clang-cl y MS STL, se queja de los especificadores de "lanzar x (y)". Tal vez necesitaba proporcionar algunas claves adicionales para la compilación, pero no pude hacer que funcionara.

C: / Archivos de programa (x86) / Microsoft Visual Studio 14.0 / VC / include / xiosbase (293,4): error: no se puede compilar esta expresión de lanzamiento todavía _THROW_NCEE (error, "ios_base :: eofbit set"); C: / Archivos de programa (x86) / Microsoft Visual Studio 14.0 / VC / include / xstddef (56,30): nota: expandido desde la macro ''_THROW_NCEE'' #define _THROW_NCEE (x, y) throw x (y)


Tuve numerosos problemas al compilar LLVM y clang usando VS y siendo usuario de Unix, prefiero compilar fuentes desde la línea de comandos.

Siguiendo las instrucciones de Seth Carnegie, lo construí desde el repositorio de SVN en lugar de los paquetes provistos, utilizando LLVM v3.3 con MinGW v4.5.2.


Usé el siguiente método para compilar el Clang para C ++ en Windows 7 y ha sido validado por Mysticial y otros:

  1. Descargue e instale MinGW (asegúrese de instalar el compilador de C ++) y coloque la carpeta bin en su PATH (tengo MinGW 4.6.1 y probé con éxito en otra computadora con 4.6.2)
  2. Asegúrese de tener Python en su RUTA ( no 3 , tengo 2.7)
  3. (Opcional: asegúrese de tener Perl en su PATH (usé ActivePerl 5.14.2 de 64 bits))
  4. Obtén CMake y ponlo en tu RUTA
  5. Vaya a la página de descargas de LLVM y descargue el código fuente de LLVM 3.0 junto con el código fuente de Clang. No obtenga el código de la SVN, no funciona con los encabezados de MinGW.
  6. Extraer los códigos fuente; Tuve la fuente llvm en una carpeta llamada llvm-3.0.src en mi escritorio
  7. Coloque la fuente de clang directamente en una carpeta llamada "clang" (debe llamarse así exactamente o usted creará llvm pero no se creará clang) en la carpeta "herramientas" dentro de la carpeta de fuentes de llvm, esto debería hacer que se vean sus directorios me gusta:
    • fuente llvm
      • carpeta autoconf
      • ...
      • carpeta de herramientas
        • ...
        • carpeta clang
          • carpeta de enlaces
          • ...
          • Archivo makefile
          • ...
        • ...
      • ...
  8. Cree una carpeta llamada "build" en el mismo directorio que la carpeta fuente de llvm
  9. Abra una línea de comando y cd en la carpeta de compilación
  10. Ejecute el comando cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release ../llvm-3.0.src

    • (el último argumento es la ruta relativa a la carpeta que contiene el origen llvm (y el origen del clang en el subdirectorio tools / clang))

    • Esto hará el equivalente de un comando "configurar", y los archivos make y todo se generarán en la carpeta de compilación

    • Esto tomará unos pocos minutos
  11. Ejecuta el comando mingw32-make

    • Esto compilará llvm y clang, y los ejecutables de clang se generarán en la carpeta build / bin
    • Esto probablemente llevará mucho tiempo. (Puede intentar acelerarlo agregando compilaciones paralelas, opción -j<number> ) Podría ser bueno cerrar todos los demás programas para que su computadora pueda concentrarse, y así no interfieran con el largo proceso de compilación, como como poner un candado en una carpeta en la que el compilador está escribiendo (me pasó a mí). Incluso desactivé mi software antivirus y firewall para que no intentaran escanear los archivos generados y estorbar.

Tiempo para probarlo

  1. Cree un archivo .cpp en la carpeta build / bin (usaré hello.cpp). Use un encabezado de biblioteca estándar para asegurarse de que las rutas y bibliotecas de inclusión estén funcionando. Comience con un programa muy simple.

    (Lo que empecé con:

    #include <iostream> int main() { std::cout << "hi"; }

    )

  2. Ejecute el comando clang hello.cpp -std=c++0x -I"C:/MinGW/lib/gcc/mingw32/4.6.1/include/c++" -I"C:/MinGW/lib/gcc/mingw32/4.6.1/include/c++/mingw32" -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1 -Lc:/mingw/bin/../lib/gcc -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../../mingw32/lib -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../.. -L/mingw/lib -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt

    (-L especifica un directorio en el que buscar bibliotecas y -l especifica una biblioteca para vincular) (Si no tiene MinGW instalado en la misma ruta que yo, puede encontrar las rutas con el comando "g ++ somefile. cpp -v "para que g ++ se desvele sobre las opciones que utiliza para las rutas de la biblioteca, los archivos de la biblioteca y todo lo demás. Busque las opciones -L y -l cerca del final de la salida. Tenga en cuenta el archivo .o nombres que están intercalados con los -L. Clang usa muchas de las mismas opciones que g ++, así que literalmente copié y pegué esa línea de la salida de g ++)

    Esto debería compilar su programa y producir un archivo llamado a.out

  3. renombrar a.out a a.exe o lo que sea

  4. Ejecuta el .exe
  5. Su programa debería ejecutarse.

Clang (3.0) todavía tiene algunos problemas en Windows (no sé si estos problemas también están en Linux). Por ejemplo, compilar un lambda (que no es compatible con clang) con -std = c ++ 0x causará que el clang se bloquee y emita un error de diagnóstico. (Me informaron en el IRC de LLVM que esto se debe a que Clang implementa el análisis de lambdas pero no el análisis semántico, que es la fase en la que se bloquea (porque olvidaron desactivar el análisis de lambdas para la versión 3.0), y ya lo saben. insecto)

Además, el ilustre Mysticial amablemente aceptó probar esta guía e hizo algunas observaciones durante su prueba:

  1. Los encabezados de Windows parecen funcionar.
  2. Actualmente solo funciona para 32 bits.
  3. 64 bits compila bien, pero no ensamblará.
  4. SSE probablemente está bien. ([Mysticial no] ha probado una SSE funcional en 32 bits).