16 Pregunta: ¿Cuál es la diferencia entre Cygwin y MinGW?

pregunta creada en Tue, Feb 21, 2017 12:00 AM

Quiero que mi proyecto de C ++ sea multiplataforma, y ​​estoy considerando usar Cygwin /MinGW. Pero ¿cuál es la diferencia entre ellos?

Otra pregunta es si podré ejecutar el binario en un sistema sin Cygwin /MinGW?

    
596
16 Respuestas                              16                         

Como simplificación, es así:

  • Compila algo en Cygwin y lo estás compilando para Cygwin .

  • Compile algo en MinGW y lo está compilando para Windows .

Acerca de Cygwin

El propósito de Cygwin es hacer que las aplicaciones basadas en Unix a Windows sean mucho más fáciles, emulando muchos de los pequeños detalles que proporcionan los sistemas operativos basados ​​en Unix, y están documentados en POSIX estándares. Su aplicación puede usar la característica Unix como tuberías, archivos de estilo Unix y acceso a directorios, etc., y puede compilarse con Cygwin que actuará como capa de compatibilidad alrededor de su aplicación, de modo que muchos de esos paradigmas específicos de Unix se pueden seguir utilizando.

Cuando distribuya su software, el destinatario deberá ejecutarlo junto con el entorno de tiempo de ejecución de Cygwin (proporcionado por el archivo cygwin1.dll). Puede distribuir esto con su software, pero su software tendrá que cumplir con su licencia de código abierto. Incluso puede darse el caso de que incluso simplemente vinculando su software con él, pero la distribución de la DLL por separado, aún requiera que respete la licencia de código abierto.

Acerca de MinGW

MinGW pretende ser simplemente un puerto de Windows de las herramientas del compilador GNU, como GCC, Make, Bash, etc. No intenta emular o proporcionar una compatibilidad completa con Unix, sino que proporciona el entorno mínimo necesario para usar GCC (el compilador GNU) y una pequeña cantidad de otras herramientas en Windows . No tiene una capa de emulación Unix como Cygwin, pero como resultado, su aplicación debe estar programada específicamente para poder ejecutarse en Windows, lo que puede significar una alteración significativa si se creó para confiar en que se ejecute en un entorno estándar de Unix. utiliza características específicas de Unix como las mencionadas anteriormente. De forma predeterminada, el código compilado en GCC de MinGW se compilará en un destino nativo de Windows X86, incluidos los archivos .exe y .dll, aunque también puede compilarse de forma cruzada con la configuración correcta, ya que básicamente está utilizando el conjunto de herramientas de compilación de GNU.

MinGW es esencialmente una alternativa al compilador Microsoft Visual C ++ y sus asociados enlazar /hacer herramientas. En algunos casos, puede ser posible usar MinGW para compilar algo destinado a compilar con Microsoft Visual C ++, con las bibliotecas adecuadas y, en algunos casos, con otras modificaciones.

MinGW incluye algunas bibliotecas estándar básicas para interactuar con el sistema operativo Windows, pero al igual que las bibliotecas estándar normales incluidas en la colección de compiladores GNU, estas no imponen restricciones de licencia en el software que haya creado.

Para aplicaciones de software no triviales, hacerlas multiplataforma puede ser un desafío considerable a menos que use un marco integral multiplataforma. En el momento en que escribí esto, el framework Qt fue uno de los más populares para este propósito , que permite la creación de aplicaciones gráficas que funcionan en todos los sistemas operativos, incluido Windows, pero también hay otras opciones. Si usa un marco de este tipo desde el principio, no solo puede reducir sus dolores de cabeza cuando llega el momento de trasladarse a otra plataforma, sino que también puede usar los mismos widgets gráficos (ventanas, menús y controles) en todas las plataformas si está escribiendo un Aplicación GUI, y hacer que aparezcan nativos para el usuario.

    
561
2018-10-18 00: 31: 42Z
  1. El bash que viene con MinGW no es un programa nativo de Windows. Depende de la DLL de MSYS, que es parak de la DLL de Cygwin. Lo mismo para muchas de las otras utilidades de Unix que vienen con MinGW /MSYS. MinGW gcc de hecho es un programa nativo sin embargo. Make está disponible tanto en una versión nativa como en una MSYS.
    2012-03-07 10: 23: 05Z
  2. ¿alguna diferencia en términos de velocidad?
    2014-02-27 19: 33: 48Z
  3. La diferencia de velocidad será ignorable en la mayoría de las situaciones . Cualquier diferencia se reducirá a cuánto ralentiza el nivel adicional de abstracción proporcionado por la capa de compatibilidad de cygwin. Puede tener un efecto medible en cosas como I /O. Por ejemplo, hace mucho tiempo, Git solo se ejecutaba en Windows en cygwin, y debido a eso era bastante más lento. Por otra parte, si codifica utilizando un marco, también es una capa de abstracción con el potencial de ralentizar algunas cosas de todos modos.
    2014-02-28 01: 28: 33Z
  4. Debo tener en cuenta que el código compilado para cygwin sigue siendo código nativo , no necesita ejecutar un intérprete como Java. Es solo que cuando necesita interactuar con ciertas funciones del sistema operativo, como el disco /archivo, pasa por otra capa.
    2014-02-28 01: 31: 03Z
  5. Globalmente no podrías comparar, porque debes escribir tu código de manera diferente dependiendo de si es para cygwin o no. Aunque para cualquier software pequeño y simple como "hola mundo" el equivalente de cygwin será más grande solo debido a la biblioteca de tiempo de ejecución de cygwin. Si no cuenta el tamaño de la biblioteca en tiempo de ejecución de cygwin, la versión de cygwin generalmente será más pequeña , pero creo que es una cifra falsa, ya que la biblioteca prácticamente siempre deberá contar con el software. Dicho esto, si está utilizando bibliotecas /marcos no triviales, entonces dependerá más de eso.
    2014-04-17 01: 51: 37Z

Cygwin es un intento de crear un entorno completo UNIX /POSIX en Windows. Para ello utiliza varios archivos DLL. Si bien estos archivos DLL están cubiertos por GPLv3 +, su licencia contiene una excepción que no obliga a cubrir un trabajo derivado por la GPLv3 +. MinGW es un conjunto de compiladores C /C ++ que le permite crear ejecutables de Windows sin depender de tales DLL, solo necesita los tiempos de ejecución normales de MSVC, que son parte de cualquier instalación normal de Microsoft Windows.

También puede obtener un entorno pequeño similar a UNIX /POSIX, compilado con MinGW llamado MSYS . No tiene en ninguna parte cerca de todas las características de Cygwin, pero es ideal para los programadores que desean usar MinGW.

    
304
2013-08-05 05: 06: 56Z
  1. ¿Pero si quiero lanzar un software gratuito que no sea GPL? Lo siento, no soy un fan de la GPL, eso es todo.
    2010-01-02 15: 05: 22Z
  2. @ Dan No es necesario redistribuir el tiempo de ejecución que utiliza MinGW, es parte de Windows.
    2010-07-13 22: 50: 43Z
  3. @ ak2: eso es cierto, pero es engañoso. El entorno cygwyn gcc + cygwin por defecto produce binarios vinculados a la dll cygwin (GPL). mingw + msys utiliza de forma predeterminada los binarios vinculados a la plataforma C lib.
    2011-06-02 20: 49: 44Z
  4. @ DanMoulding Si no es un fanático de Microsoft, tendrá que ignorar esos sentimientos para desarrollarse para Windows en primer lugar. ;-)
    2012-08-17 22: 20: 20Z
  5. @ anon "Pero si quiero liberar la no GPL gratissoftware? "... cygwin tiene una excepción especial en sus términos de licencia que le permite distribuir software libre vinculado a él con otras licencias de código abierto (no GPL). Consulte" Excepción de licencias de código abierto "aquí: cygwin.com/licensing.html
    2014-04-19 04: 37: 04Z

Para agregar a las otras respuestas, Cygwin viene con las bibliotecas y los encabezados de MinGW y puede compilar sin vincular a cygwin1.dll utilizando el indicador -mno-cygwin con gcc. Prefiero esto a usar MinGW y MSYS.

    
137
2017-02-21 02: 32: 57Z
  1. Esto ya no funciona con cygwin 1.7.6. gcc: la bandera -mno-cygwin ha sido eliminada; use un compilador cruzado orientado a mingw.
    2010-08-30 08: 06: 42Z
  2. @ sigjuice: true, pero el antiguo indicador -mno-cygwin todavía funciona para GCC 3.x: gcc-3 -mno-cygwin
    2011-09-04 13: 33: 01Z
  3. Entonces, ¿esto significa que necesito descargar las bibliotecas mingw desde el sitio oficial de mingw para compilar un objetivo mingw desde un host cygwin? ¿O pueden descargarse estas bibliotecas del sistema de paquetes de Cygwin?
    2015-02-20 07: 02: 14Z
  4. @ CMCDragonkai Puede adquirir compiladores compatibles con mingw desde el sitio de Cygwin ejecutando la utilidad de configuración, localizándolos y marcándolos. Entonces, aunque gcc ya no genera código compatible con mingw, dentro de Cygwin puede ejecutar un "mingw-gcc" (que no es el nombre completo) para hacer el mismo tipo de ejecutable que el compilador mingw bajo msys.
    2015-03-03 23: 25: 04Z
  5. Para enmendar la útil respuesta de Cardiff, los paquetes y comandos MinGW de Cygwin tienen nombres poco claros. Para instalar MinGW-64 ( casi lo que siempre desea, en estos días ), instale el paquete mingw64-x86_64-gcc-core Cygwin. MinGW-64 estará disponible como el comando x86_64-w64-mingw32-gcc con un nombre extraño. Por favor, Dios (es), alguien unifique los nombres de estas cosas sangrientas ya.
    2015-08-23 05: 25: 26Z

Wikipedia hace una comparación aquí .

Del sitio web de Cygwin:

  
  • Cygwin es un entorno similar a Linux para Windows. Consta de dos partes: una DLL (cygwin1.dll) que actúa como una capa de emulación de API de Linux que proporciona una funcionalidad sustancial de API de Linux.   
  • Una colección de herramientas que proporcionan la apariencia de Linux.
  •   

Desde el sitio web de Mingw :

  

MinGW ("GNU minimalista para Windows") es una colección de archivos de encabezado específicos de Windows de libre distribución y distribución libre combinados con conjuntos de herramientas GNU que permiten producir programas nativos de Windows que no dependen de C de terceros. DLL de tiempo de ejecución

    
60
2010-07-13 22: 22: 04Z

Cygwin usa una DLL, cygwin.dll, (o tal vez un conjunto de DLL) para proporcionar un tiempo de ejecución similar a POSIX en Windows.

MinGW se compila en una aplicación Win32 nativa.

Si creas algo con Cygwin, cualquier sistema en el que lo instales también necesitará los archivos DLL de Cygwin. Una aplicación MinGW no necesita ningún tiempo de ejecución especial.

    
45
2009-04-21 09: 20: 21Z

Lea estas preguntas respondidas para comprender la diferencia entre Cygwin y MinGW.


Pregunta # 1: quiero crear una aplicación en la que escribo el código fuente una vez, lo compilo una vez y lo ejecuto en cualquier plataforma (por ejemplo, Windows, Linux y Mac OS X ...).

  

Respuesta # 1: Escriba su código fuente en   JAVA. Compilar el código fuente una vez y   ejecutarlo en cualquier lugar.


Pregunta # 2: quiero crear una aplicación en la que escribo el código fuente una vez, pero no hay problema de que compile el código fuente para cualquier plataforma por separado (por ejemplo, Windows, Linux y Mac OS X ...).

  

Respuesta # 2: Escribe tu código fuente en C   o C ++. Usar archivos de encabezado estándar   solamente. Utilice un compilador adecuado para cualquier   plataforma (por ejemplo, Visual Studio para   Windows, GCC para Linux y XCode para   Mac). Tenga en cuenta que no debe usar ningún   funciones avanzadas de programación para   compila tu código fuente en todos   plataformas con éxito. Si utiliza   ninguna clase estándar de C o C ++ o   funciones, su código fuente no lo hace   compilar en otras plataformas.


Pregunta # 3: En respuesta a la pregunta # 2, es difícil usar un compilador diferente para cada plataforma, ¿hay algún compilador multiplataforma?

  

Respuesta # 3: Sí, usar compilador GCC. Eso   Es un compilador multiplataforma. A   compila tu código fuente en Windows   use MinGW que proporciona el compilador GCC   Para Windows y compila tu fuente.   Código al programa nativo de Windows. No haga   utilizar cualquier función de programación avanzada   (como la API de Windows) para compilar su   Código fuente en todas las plataformas.   exitosamente. Si usas la API de Windows   funciones, su código fuente no lo hace   compilar en otras plataformas.


Pregunta # 4: los archivos de encabezado estándar de C o C ++ no proporcionan ninguna función de programación avanzada como multihilo. ¿Qué puedo hacer?

  

Respuesta # 4: Debes usar POSIX   (Interfaz de sistema operativo portátil   [para UNIX]) estándar. Proporciona muchos   funciones avanzadas de programación y   herramientas. Muchos sistemas operativos completamente o   parcialmente compatible con POSIX (como Mac OS   X, Solaris, BSD /OS y ...). Algunos   sistemas operativos mientras no oficialmente   certificado como compatible POSIX, conforme   en gran parte (como Linux, FreeBSD,   OpenSolaris y ...). Cygwin proporciona   un desarrollo en gran medida compatible con POSIX   y el entorno de tiempo de ejecución para Microsoft   Windows.


Así:

Para usar las ventajas del compilador multiplataforma GCC en Windows, usa MinGW.

Para aprovechar las ventajas de las funciones y herramientas de programación avanzada estándar de POSIX en Windows, use Cygwin.

    
40
2011-04-01 00: 06: 02Z
  1. Acerca de tu pequeño faq: 1) Tienes razón, si necesitas algo que funcione en cualquier lugar y no sea necesario compilarlo, elige algo como java (tampoco lo olvides python, perl, ruby ​​y el resto de los lenguajes de script) 2) Esto es un tanto incorrecto para el caso de C, ya que todos los compiladores de C lo apoyan muy bien. 3) Aún puedes usar la API de Win32, pero debes envolverla en una capa de portabilidad, por lo que es solo un problema de diseño.
    2011-09-26 20: 39: 22Z
  2. 4) Esto es totalmente incorrecto, debido a las razones que menciono anteriormente, ya que POSIX es solo otro api, también si defiendes tanto POSIX, debes saber que incluso Los Unices no necesitan implementar el mismo conjunto de POSIX, entonces, ¿cómo lidiar con eso? El tiempo real POSIX api viene a la mente. Y eso lo convierte en una conclusión completamente falsa y errónea, porque no necesita POSIX para nada en Windows, solo puede usar la API de Win32. O, ¿cómo crees que Qt, GTK y WxWidgets han encontrado una manera de ser multiplataforma? Supongo que todos tienen que usar Cygwin en Windows. -1 vota por tu respuesta.
    2011-09-26 20: 39: 51Z
  3. No entiendo tu argumento, @ Coyote21. ¿Está diciendo que POSIX no es adecuado para el desarrollo multiplataforma? ¿Está diciendo que la única forma adecuada de escribir código en C /C ++ para múltiples plataformas es escribir su propia capa de compatibilidad para cada plataforma?quieres apoyar? No veo nada malo en la sugerencia de comenzar con POSIX. Debe ver hasta dónde puede llegar y si se requerirá una solución de capa de compatibilidad extensa. Las capas de compatibilidad grandes no son la norma. Decir lo contrario es argumentar que POSIX es un completo fracaso.
    2012-10-22 23: 05: 54Z
  4. El multiproceso se implementa a través de la capa POSIX incluso en MinGW.
    2016-01-22 01: 47: 07Z
  5. "no debe usar ninguna función de programación avanzada para compilar su código fuente en todas las plataformas con éxito." Realmente necesita aclarar lo que quiere decir con "funciones de programación avanzadas". Basándome en una línea posterior, supongo que realmente quiere decir características específicas de la plataforma . Si se refería a las características del lenguaje moderno, entonces no, porque existen compiladores competentes para "todas las plataformas [principales]", y no debemos privarnos de las características solo para apuntalar a aquellos cuyos compiladores o bibliotecas aún se quedan atrás. Con un compilador decente, C /++ estándar y bibliotecas multiplataforma, podemos ser mucho avanzados
    2016-04-23 14: 25: 05Z

Wikipedia dice :

  

MinGW bifurcados de la versión 1.3.3 de Cygwin. Aunque ambos Cygwin   y MinGW se pueden usar para conectar el software UNIX al Windows,   Tienen diferentes enfoques: Cygwin tiene como objetivo proporcionar un completo POSIX layer.   Que proporciona emulaciones de varias llamadas al sistema y bibliotecas.   que existen en Linux, UNIX, y las variantes BSD. El POSIX layer   se ejecuta en la parte superior de Windows, sacrificando el rendimiento donde   necesario para la compatibilidad. En consecuencia, este enfoque requiere    Programas Windows escritos con Cygwin para ejecutarse sobre un copylefted   biblioteca de compatibilidad que debe ser distribuida con el programa, junto con   Con el programa del source code. MinGW tiene como objetivo proporcionar nativos.   Funcionalidad y rendimiento a través de Windows API calls directo. diferente a    Cygwin, MinGW no requiere una capa de compatibilidad DLL y   por lo tanto, los programas no necesitan ser distribuidos con source code.

     

Debido a que MinGW depende de Windows API calls, no puede   proporcionar un total de POSIX API; no puede compilar unos UNIX applications que pueden compilarse con Cygwin. Específicamente, este   se aplica a aplicaciones que requieren la funcionalidad POSIX como    fork(), mmap() o ioctl() y aquellos que esperan ejecutarse en un    POSIX environment. Aplicaciones escritas usando un cross-platform library que se ha portado a MinGW, como SDL,    wxWidgets, Qt o GTK+, generalmente se compilarán tan fácilmente en    MinGW como lo harían en Cygwin.

     

La combinación de MinGW y MSYS proporciona un pequeño y autónomo   Entorno que se puede cargar en medios extraíbles sin dejar   Entradas en el registro o archivos en la computadora. Cygwin Portatil   proporciona una característica similar. Al proporcionar más funcionalidad, Cygwin   se vuelve más complicado de instalar y mantener.

     

También es posible cross-compile Windows applications con    MinGW-GCC under POSIX systems. Esto significa que los desarrolladores no   necesita una instalación de Windows con MSYS para compilar software que   corre en Windows sin Cygwin.

    
25
2017-07-11 13: 12: 25Z
  1. Definitivamente, no "es más complicado de instalar y mantener" ! Use apt-cyg ya que es quizás incluso más fácil que usar apt bajo WSL.
    2018-12-21 11: 29: 59Z

Desde el punto de vista de portar un programa en C, una buena manera de entender esto es tomar un ejemplo:

 
#include <sys/stat.h>
#include <stdlib.h>

int main(void)
{
   struct stat stbuf;
   stat("c:foo.txt", &stbuf);
   system("command");
   printf("Hello, World\n");
   return 0;
}

Si cambiamos stat a _stat, podemos compilar este programa con Microsoft Visual C. También podemos compilar este programa con MinGW y con Cygwin.

Bajo Microsoft Visual C, el program se vinculará a una biblioteca de tiempo de ejecución redistribuible de MSVC: mxvcrtnn.dll, donde nn es un sufijo de alguna versión. Para enviar este programa tendremos que incluir ese DLL. Esa DLL proporciona _stat, system y printf.

Bajo MinGW, el programa se vinculará a msvcrt.dll, que es una biblioteca interna, no documentada, no versionada, que forma parte de Windows y está fuera del alcance de la aplicación. Esa biblioteca es esencialmente una bifurcación de la biblioteca de tiempo de ejecución redistribuible de MS Visual C para uso de Windows.

Bajo estos dos, el programa tendrá comportamientos similares:

  • la función stat devolverá información muy limitada, sin permisos útiles o número de inodo, por ejemplo.
  • la ruta de acceso c:file.txt se resuelve de acuerdo con el directorio de trabajo actual asociado con la unidad c:.
  •  system usa cmd.exe /c para ejecutar el comando externo.

También podemos compilar el programa bajo Cygwin. De manera similar al tiempo de ejecución redistribuible utilizado por MS Visual C, el programa Cygwin se vinculará a las bibliotecas de tiempo de ejecución de Cygwin: cygwin1.dll (Cygwin propiamente dicho) y cyggcc_s-1.dll (soporte de tiempo de ejecución de GCC). Dado que Cygwin ahora está bajo la licencia LGPL, podemos empaquetarlo con nuestro programa, incluso si no es software libre compatible con GPL, y enviar el programa.

Bajo Cygwin, las funciones de la biblioteca se comportarán de manera diferente:

  • la función stat tiene una gran funcionalidad, devolviendo valores significativos en la mayoría de los campos.
  • no se entiende que la ruta c:file.txt contenga una referencia de letra de unidad, ya que c: no va seguida de una barra. Los dos puntos se consideran parte del nombre y de alguna manera se mutilan en él. No hay un concepto de una ruta relativa contra un volumen o unidad en Cygwin, ningún concepto de "unidad actualmente registrada" y ningún directorio de trabajo actual por unidad.
  • la función system intenta utilizar el intérprete /bin/sh -c. Cygwin resolverá la ruta / de acuerdo con la ubicación de su ejecutable, y esperará que un programa sh.exe se ubique junto con su ejecutable.

Tanto Cygwin como MinGW le permiten usar las funciones de Win32. Si desea llamar al MessageBox o al CreateProcess, puede hacerlo. También puede crear fácilmente un programa que no requiera una ventana de consola, usando gcc -mwindows, bajo MinGW y Cygwin.

Cygwin no es estrictamente POSIX. Además de proporcionar acceso a la API de Windows, también proporciona sus propias implementaciones de algunas funciones de Microsoft C (cosas que se encuentran en msvcrt.dll o en los tiempos de ejecución redistribuibles de msvcrtnn.dll). Un ejemplo de esto son las funciones de la familia spawn* como spawnvp. Estos son una buena idea de usar en lugar de fork y exec en Cygwin, ya que se asignan mejor al modelo de creación de procesos de Windows que no tiene el concepto de fork.

Así:

  • Los programas de Cygwin no son menos "nativos" que los programas de MS Visual C porque requieren el acompañamiento de las bibliotecas. Se espera que las implementaciones de lenguaje de programación en Windows proporcionen sus propias implementaciones en tiempo de ejecución, incluso en lenguaje C. No hay "libc" en Windows para uso público.

  • El hecho de que MinGW no requiere DLL de terceros es realmente una desventaja; depende de una bifurcación interna de Windows no documentada del tiempo de ejecución de Visual C. MinGW hace esto porque la excepción de la biblioteca del sistema GPL se aplica a msvcrt.dll, lo que significa que los programas GPL-ed pueden compilarse y redistribuirse con MinGW.

  • Debido a su soporte mucho más amplio y profundo para POSIX en comparación con msvcrt.dll, Cygwin es, con mucho, el entorno superior para portar programas POSIX. Dado que ahora está bajo la licencia LGPL, permite que las aplicaciones con todo tipo de licencias, de código abierto o cerrado, se redistribuyan. Cygwin incluso contiene la emulación VT100 y termios, que funcionan con la consola de Microsoft. Una aplicación POSIX que configura el modo sin formato con tcsetattr y usa códigos VT100 para controlar el cursor funcionará directamente en la ventana de cmd.exe. En lo que respecta al usuario final, es una aplicación de consola nativa que realiza llamadas a Win32 para controlar la consola.

Sin embargo:

  • Como herramienta de desarrollo nativa de Windows, Cygwin tiene algunas peculiaridades, como el manejo de rutas que es ajeno a Windows, la dependencia de algunas rutas codificadas como /bin/sh y otros problemas. Estas diferencias son las que hacen que los programas de Cygwin sean "no nativos". Si un programa toma una ruta como argumento o entrada de un cuadro de diálogo, los usuarios de Windows esperan que esa ruta funcione de la misma manera que lo hace en otros programas de Windows. Si no funciona de esa manera, eso es un problema.

Enchufe: Poco después del anuncio de LGPL, comencé el Cygnal (Biblioteca de aplicaciones nativas de Cygwin) proyecto para proporcionar una bifurcación de la DLL de Cygwin que tiene como objetivo solucionar estos problemas. Se pueden desarrollar programas.d bajo Cygwin, y luego implementado con la versión Cygnal de cygwin1.dll sin recompilar. A medida que esta biblioteca mejore, gradualmente eliminará la necesidad de MinGW.

Cuando Cygnal resuelva el problema de manejo de la ruta, será posible desarrollar un único ejecutable que funcione con las rutas de Windows cuando se envíe como una aplicación de Windows con Cygnal, y que funcione sin problemas con las rutas de Cygwin cuando se instale en su /usr/bin bajo Cygwin. Bajo Cygwin, el ejecutable funcionará de forma transparente con una ruta como /cygdrive/c/Users/bob. En la implementación nativa donde se vincula con la versión Cygnal de cygwin1.dll, esa ruta no tendrá sentido, mientras que entenderá c:foo.txt.

    
23
2016-07-06 18: 48: 08Z
  1. Excelente respuesta. Mostrar lo que sucede cuando se compila, vincula y ejecuta el mismo fragmento de código en cada uno de los 3 entornos es clave y aclara las diferencias.
    2017-04-21 14: 05: 30Z
  2. @ Kaz ¿Cómo va ese desarrollo? Suena interesante, pero parece muerto desde hace al menos un año. ¿Por qué no usas GitHub para que la gente pueda ayudar y participar?
    2018-12-21 11: 26: 14Z
  3. @ not2qubit Siento que tengo mejor control sobre mis proyectos cuando están alojados en mi propio servidor que yo mismo me controlo. Estoy usando git; El repositorio se puede tirar. Puedo aceptar solicitudes de extracción por correo electrónico (como Linus Torvalds las diseñó). También puedo otorgar una cuenta con privilegios de compromiso a alguien que se convierta en un contribuyente de nivel de mantenedor. Cygnal funciona bien; Regularmente lo estoy empaquetando en las versiones de Windows de las nuevas versiones del idioma TXR. Volveré a ingresar a Cygnal a una nueva línea de base de Cygwin en algún momento a principios de 2019.
    2018-12-22 06: 36: 22Z
  4. @ not2qubit Tenga en cuenta que los 17 problemas en la agenda de Cygnal son los que se abordaron. Nadie ha sugerido nuevos requisitos o se ha quejado de la forma en que se manejan esos 17. por lo tanto, no se requiere desarrollo más que volver a basar a Cygwin más reciente, lo cual no es muy urgente.
    2018-12-22 06: 44: 43Z

    No pase por alto el U /Win de AT & T, que está diseñado para ayudarlo a compilar aplicaciones Unix en Windows (última versión - 2012-08-06; usa Eclipse Public License, Versión 1.0).

    Al igual que Cygwin, tienen que correr contra una biblioteca; En su caso POSIX.DLL. Los chicos de AT & T son excelentes ingenieros (el mismo grupo que te trajo ksh y punto ) y vale la pena echarles un vistazo.

        
    14
    2016-08-30 03: 42: 49Z
    1. Vaya, esas son algunas páginas web malas. Finalmente pude encontrar un enlace de descarga en www2.research.att.com/sw/download , pero no hay documentación en línea o información sobre el proyecto.
      2012-02-02 01: 24: 03Z
    2. Si bien la información es útil, creo que esta podría ser la respuesta a una pregunta sobre alternativas para MingW o Cygwin en lugar de esta pregunta.
      2016-11-05 13: 47: 31Z

    Cygwin emula todo el entorno POSIX, mientras que MinGW es un conjunto de herramientas mínimo para compilación solamente (compila la aplicación Win nativa). Entonces, si desea que su proyecto sea multiplataforma, la elección entre los dos es obvia, MinGW.

    Aunque podría considerar el uso de VS en Windows, GCC en Linux/Unices. La mayoría de los proyectos de código abierto hacen eso (por ejemplo, Firefox o Python).

        
    10
    2009-04-21 09: 25: 15Z
    1. "Most" parece una palabra de comadreja sin sentido aquí, especialmente con solo 2 ejemplos y sin estadísticas. Muchos proyectos de software libre lanzan un archivo de proyecto VS como un gesto de token, sospecho que es más preciso. Pero si la experiencia pasada es algo por lo que pasar, GCC o Clang suelen ser más seguros, ya que VS tiende a retrasarse considerablemente a medida que evolucionan los estándares lingüísticos.
      2016-04-02 01: 00: 59Z
    2. Esa es una respuesta de 2009. Hoy en día las cosas se ven aún más sombrías para GCC. En cuanto a "la mayoría", si se mide por impacto, solo Firefox y Chrome solo tienen más usuarios que cualquier otra cosa.
      2016-04-02 01: 19: 23Z
    3. Lo que ha cambiado desde que respondí es que ahora clang es una solución multiplataforma viable.
      2016-04-02 01: 20: 36Z

    Para usar Cygwin en una aplicación comercial /propietaria /no de código abierto, deberá desembolsar decenas de miles de dólares por un " compra de licencia " de Red Hat; esto invalida los términos de licencia estándar a un costo considerable. Google "cuesta la licencia de cygwin" y ve los primeros resultados.

    Para mingw, no se incurre en tal costo, y las licencias (PD, BSD, MIT) son extremadamente permisivas. Como máximo, se puede esperar que proporcione los detalles de la licencia con su aplicación, como la licencia winpthreads requerida al usar mingw64-tdm.

    EDITAR gracias a Izzy Helianthus: La licencia comercial ya no está disponible o no es necesaria porque la biblioteca API se encuentra en el subdirectorio winsup de Cygwin ahora se está distribuyendo bajo la licencia LGPL, a diferencia de la GPL completa.

        
    9
    2017-02-26 12: 59: 13Z
    1. Una actualización del sitio web de Redhat (el enlace de "compra de licencia" - 'A partir del 1 de marzo de 2016, Red Hat ya no vende la Licencia de Compra Comercial para Cygwin. El comercial la licencia ya no es necesaria porque Cygwin ahora se distribuye bajo la GNU Lesser GPL (LGPL). '> Desde el sitio web de Cygwin. La biblioteca de API de Cygwin ™ que se encuentra en el subdirectorio winsup del código fuente está cubierta por la Licencia Pública General Menor GNU (LGPL) versión 3 o posterior. Para obtener información detallada sobre los requisitos de LGPLv3, lea la Licencia pública general reducida de GNU (LGPL).
      2017-02-26 11: 24: 18Z

    Tenga en cuenta que el comportamiento de la utilidad realmente puede variar entre los dos.

    Por ejemplo, Cygwin tar puede bifurcarse, porque fork () es compatible con la DLL, donde la versión mingw no puede. Esto es un problema al intentar compilar mysql desde la fuente.

        
    8
    2009-04-21 09: 23: 24Z
    1. Esta es la razón por la cual los entornos compatibles con MinGW son completamente nuevos, por ejemplo. MSYS2, ofrece un Cygwin u otra capa totalmente compatible con POSIX para las tuercas y pernos de bajo nivel de las cadenas de herramientas necesarias durante la construcción. Luego, la compilación y el enlace reales se dejan al compilador MinGW totalmente nativo. MSYS2 es realmente bueno.
      2016-04-02 01: 05: 10Z

    Cygwin está diseñado para proporcionar un entorno POSIX más o menos completo para Windows, incluido un extenso conjunto de herramientas diseñadas para proporcionar una plataforma similar a Linux. En comparación, MinGW y MSYS proporcionan una capa ligera, minimalista, similar a POSIX, con solo las herramientas más esenciales como gcc y bash disponibles. Debido al enfoque más minimalista de MinGW, no proporciona el grado de cobertura POSIX API que ofrece Cygwin y, por lo tanto, no puede crear ciertos programas que de otra forma podrían compilarse en Cygwin.

    En términos del código generado por los dos, la cadena de herramientas de Cygwin se basa en la vinculación dinámica a una biblioteca de tiempo de ejecución grande, cygwin1.dll, mientras que la cadena de herramientas de MinGW compila código a binarios que se vinculan dinámicamente a la biblioteca C nativa de Windows msvcrt.dll, así como estáticamente a partes de glibc. Los ejecutables de Cygwin son, por lo tanto, más compactos, pero requieren una DLL redistribuible por separado, mientras que los binarios de MinGW se pueden enviar de forma independiente pero tienden a ser más grandes.

    El hecho de que los programas basados ​​en Cygwin requieren una DLL separada para ejecutarse también conduce a restricciones de licencia. La biblioteca de ejecución de Cygwin está licenciada bajo GPLv3 con una excepción de enlace para aplicaciones con licencias compatibles con OSI, por lo que los desarrolladores que deseen crear una aplicación de código cerrado en torno a Cygwin deben adquirir una licencia comercial de Red Hat. Por otro lado, el código de MinGW se puede usar tanto en aplicaciones de código abierto como de código cerrado, ya que los encabezados y las bibliotecas tienen licencias permisivas.     

    6
    2014-11-26 00: 10: 57Z

    Cygwin es un entorno similar a Unix y una interfaz de línea de comandos para Microsoft Windows.

    Mingw es un puerto de software nativo de la Colección de compiladores de GNU (GCC) para Microsoft Windows , junto con un conjunto de bibliotecas de importación y archivos de encabezado de libre distribución para la API de Windows. MinGW permite a los desarrolladores crear aplicaciones nativas de Microsoft Windows.

    Puede ejecutar los binarios generados con mingw sin el entorno cygwin, siempre que estén presentes todas las bibliotecas (DLL) necesarias.

        
    3
    2009-04-21 09: 21: 41Z

    Otras respuestas ya alcanzan el objetivo. Solo quiero agregar una ilustración para una captura rápida.

     ingrese la descripción de la imagen aquí

        
    3
    2019-04-20 14: 51: 36Z

    Cygwin utiliza una capa de compatibilidad, mientras que MinGW es nativo. Esa es una de las principales diferencias.

        
    2
    2017-12-20 01: 12: 52Z
fuente colocada aquí