w64 support portable manager instalar for compiler como c++ compilation cygwin mingw

c++ - support - ¿Por qué son necesarios Cygwin y MinGW?



mingw portable (2)

He estado tratando de entender qué son exactamente Cygwin y MinGW y lo encuentro muy confuso. Si desea programar en C ++, ¿no necesita un compilador de C ++? Por lo que he leído, parece que se esfuerzan por proporcionar un sistema operativo tipo Unix en Windows, pero no veo la importancia de esto. Quiero decir, ¿hay alguna razón por la que C ++ no se pueda compilar de forma nativa en Windows? También leí que contienen bibliotecas, ¿es así porque el lenguaje central de C ++ no admite muchas funciones, por lo que las bibliotecas tan comunes como math.h vienen con él?


Esta explicación está destinada a ser escrita en otra parte, pero aquí va de todos modos ...

Cygwin es un tiempo de ejecución compatible con POSIX construido sobre la API de Win32. Proporciona una biblioteca POSIX C en gran medida compatible, y en torno a eso, existe una especie de "Cygwin Distro" con un administrador de paquetes que le permite instalar una tonelada de programas Unix que se ejecutan bajo Cygwin. Estos incluyen un shell de Unix, GCC (para Cygwin), X, un montón de compiladores cruzados, etc.

MinGW (-w64) son proyectos que proporcionan cabeceras y bibliotecas Win32 gratuitas (como en dominio público). Puede ver esto como un reemplazo gratuito para los encabezados y las bibliotecas en el SDK de Windows (antiguo). Estos pueden ser utilizados en conjunto con GCC. Tanto los proyectos como otros terceros proporcionan compilaciones GCC nativas para Windows, que no necesitan Cygwin en absoluto. Estos paquetes se pueden ver como un reemplazo "completo" (en la medida en que se completa MinGW (-w64)) para el SDK de Windows.

Tenga en cuenta que Cygwin también proporciona compiladores cruzados de Cygwin a Win32: estos se ejecutan en la plataforma Cygwin pero producen ejecutables nativos de Win32.

Otro jugador, MSYS, es una bifurcación ligera de Cygwin, que proporciona solo la cantidad mínima de herramientas para ejecutar scripts de construcción de autotools en Windows. MSYS debe usarse junto con las herramientas nativas de MinGW (-w64), no es Cygwin y no puede extender fácilmente MSYS.

Por lo tanto, "MinGW (-w64)" se refiere a menudo a la cadena gratuita de herramientas GNU de Windows (nativo o un compilador cruzado que se ejecuta sobre Cygwin), aunque estrictamente hablando son solo los encabezados y las bibliotecas.

Para usar el compilador C ++ de GCC, te sugiero que uses mis paquetes (para crear ejecutables de 32-bit y 64-bit ) o mingw-builds . Alternativamente, puede instalar Cygwin y usar su setup.exe para instalar el compilador cruzado MinGW-w64 y usarlo desde allí, pero si no necesita una emulación de Unix casi perfecta para los scripts de compilación, le sugiero que no lo haga.

EDITAR Usted puede o no ser consciente de que existe otra alternativa, la antigua Interix, que elude el subsistema Win32 y se construye directamente sobre el kernel de NT. Esto se proporciona como Windows Services for Unix o Subsystem for Unix Applications (disponible para Windows 7 y Windows 8 y versiones anteriores de Windows ). Esta solución está disponible para los clientes de la versión Windows Pro / Ultimate y le brinda la asistencia más cercana a Unix nativa que va a obtener. Heck, incluso puedes usar Visual Studio para depurar tu software Unix :)


NOTA : esta respuesta no pretende ser exhaustiva, solo quiere presentar una comprensión simple de un concepto, fuera de las definiciones ideológicas. El uso de lenguaje impreciso es intencional. Así que los gurús del sistema operativo, por favor, no esperes definiciones perfectas.

La diferencia reside en las raíces de POSIX / UNIX y windows.

POSIX es una interfaz de programación C para sistemas operativos (entre otras cosas, como Shell y utilidades).

Unix y versiones posteriores de Linux implementan tales interfaces en sí mismas, Windows de forma nativa, no lo hace. Tiene su propia forma de gestionar las entidades del sistema operativo (Win32). Mac OS tampoco lo hace.

GCC es un conjunto de compiladores común en sistemas que ofrecen una interfaz POSIX.

Para usarlo en Windows, tiene, en este punto, dos alternativas:

  • Agregue a Windows una biblioteca (código y encabezados) que agregue la interfaz POSIX a Windows (traduciendo las llamadas POSIX a llamadas de Windows) y conecte todos los programas GNU (basados ​​en Linux) al compilarlos para usar esa biblioteca: esto es lo que hace Cygwin.

  • Reescriba los programas POSIX para que incluyan dentro de ellos todo lo relacionado con el mapeo POSIX-Windows, produciendo ejecutables nativos de Windows: de esto se trata MinGW y MSYS.

Los métodos bot tienen ventajas y desventajas. En resumen, en Cygwin, si algo se compila bajo POSIX, se compila bajo Cygwin (al menos en teoría). Pero el resultado es un programa de aspecto Unix que se ejecuta bajo Windows.

En MinGW, puede escribir programas de Windows nativos (llamando a la interfaz de Win32 C nativa), pero no puede compilar todo lo que usa la funcionalidad POSIX que no está presente en Windows. El caso más evidente es la falta de la interfaz estándar <thread> de MinGW y un soporte limitado de <locale> .