c++ - for - Clang en Windows
llvm vs gcc (2)
La respuesta obvia es que olvidaste el envío de compatibilidad -fno-ms a clang ++: P
- Tienes razón.
- VC ++ es una cadena de herramientas GUI, MinGW es una consola de caracteres.
- No, ya que el clang es lo suficientemente maduro para el consumo público, pero aún no se ha estabilizado, así que deje que su equipo de desarrolladores trabaje en el código, de lo contrario, se arriesga a trabajar y podría convertirse en una isla perdida. Estoy usando -I como su ejemplo sugiere.
Estoy haciendo la aplicación de Windows dev usando VS y uso clang + CodeBlocks para compartir aspectos neutrales al dominio de la plataforma.
En primer lugar, he seguido "Primeros pasos: crear y ejecutar Clang" . En particular, lo he construido de acuerdo con la sección "Uso de Visual Studio". En otras palabras, lo he construido utilizando Visual Studio 2010.
En segundo lugar, he establecido manualmente las rutas de inclusión y biblioteca a la distribución de MinGW:
El programa simple que estoy tratando de compilar:
#include <iostream>
using namespace std;
int main() {
cout << "Hello, World!" << endl;
return 0;
}
Recibo los siguientes comentarios del compilador:
In file included from C:/MinGW/lib/gcc/mingw32/4.5.2/include/c++/iostream:39:
In file included from C:/MinGW/lib/gcc/mingw32/4.5.2/include/c++/ostream:39:
In file included from C:/MinGW/lib/gcc/mingw32/4.5.2/include/c++/ios:38:
In file included from C:/MinGW/lib/gcc/mingw32/4.5.2/include/c++/iosfwd:41:
In file included from C:/MinGW/lib/gcc/mingw32/4.5.2/include/c++/bits/postypes.h:41:
C:/MinGW/lib/gcc/mingw32/4.5.2/include/c++/cwchar:144:11: error: no member named ''fgetws'' in the global namespace
using ::fgetws;
~~^
C:/MinGW/lib/gcc/mingw32/4.5.2/include/c++/cwchar:146:11: error: no member named ''fputws'' in the global namespace
using ::fputws;
~~^
C:/MinGW/lib/gcc/mingw32/4.5.2/include/c++/cwchar:150:11: error: no member named ''getwc'' in the global namespace
using ::getwc;
~~^
C:/MinGW/lib/gcc/mingw32/4.5.2/include/c++/cwchar:151:11: error: no member named ''getwchar'' in the global namespace
using ::getwchar;
~~^
C:/MinGW/lib/gcc/mingw32/4.5.2/include/c++/cwchar:156:11: error: no member named ''putwc'' in the global namespace
using ::putwc;
~~^
C:/MinGW/lib/gcc/mingw32/4.5.2/include/c++/cwchar:157:11: error: no member named ''putwchar'' in the global namespace
using ::putwchar;
~~^
6 errors generated.
Build error occurred, build is stopped
Time consumed: 646 ms.
La pregunta obvia es: ¿por qué me sale esto?
Además, me gustaría saber más detalles y, desde entonces, el sitio web de Clang proporciona información extremadamente breve: pensé que alguien podría aclararme las siguientes preguntas:
- Según tengo entendido, Clang no tiene su propia biblioteca estándar (stdc ++ supongo, ¿no?). Es por eso que tengo que usar los encabezados y bibliotecas de MinGW, ¿tengo razón?
- ¿Cuál es la diferencia entre crear Clang con Visual Studio y MinGW?
- ¿Tengo que incluir en el código
clang/lib/Frontend/InitHeaderSearch.cpp
rutas de acceso enclang/lib/Frontend/InitHeaderSearch.cpp
o puedo omitirlas y especificar esas rutas más adelante mediante la opción "-I" como hago en la captura de pantalla anterior?
Si crea un Clang con MSVS, buscará automáticamente las rutas de acceso de VS predeterminadas y atraerá esos encabezados. Esta es la razón por la que los encabezados libstdc ++ producen errores: están importando funciones C que no están presentes en los encabezados VS. El uso de Clang para C ++ con VS es por ahora un no-go: obtendrá fallos de enlace debido a la falta de la funcionalidad ABI (nombre mangling y otros) en Clang. Si aún desea utilizar el MSVS Clang, no apunte a los encabezados de MinGW. Analizará los encabezados de VS (incluido C ++), simplemente no podrá vincular.
EDITAR : He construido una versión dw2 de GCC (solo de 32 bits) acompañada por Clang. Las excepciones funcionan en esta compilación, por lo que puedes construir cosas reales en C ++ con Clang ahora en Windows. Obtenga la versión 3.2 aquí .