2012-03-07 14 views
5

Me pregunto en qué situaciones se usa Cygwin para compilar código C y cuándo se optaría por MinGW. Vine por What is the difference between Cygwin and MinGW? describiendo las diferencias entre Cygwin y MinGW.Cuándo usar Cygwin o MinGW para compilar el código C?

Por lo que he entendido, se podría decir lo siguiente:

  • Cygwin: Permite compilar el código fuente en C para los sistemas operativos compatibles con POSIX para funcionar en Windows (requiere cygwin1.dll). Por ejemplo, pude compilar una aplicación usando la API pthreads para Windows, aunque Windows no implementa la API.
  • MinGW: permite compilar el código fuente C compatible con Windows. Entonces, usando el ejemplo de arriba, no pude usar la API pthreads al compilar con gcc en MinGW pero sería necesario usar la API de subprocesos ofrecida por Windows. En lugar de usar el compilador MinGW gcc, también podría estar usando un compilador diferente, p. el que viene con VC++.

Sin embargo, mi comprensión parece ser incorrecta, porque pude compilar un programa ficticio que incluía pthread.h con MinGW. ¿Qué entendí mal?

Respuesta

3

Su comprensión es esencialmente correcta. Sin embargo, hay un puerto win32 pthreads, que es un contenedor delgado sobre la API de threads nativos.

Un ejemplo más apropiado sería fork(), que no se puede emular fácilmente en win32. Para hacerlo, Cygwin impone un diseño de memoria DLL fijo, y las cosas explotarán si no se puede cargar una biblioteca donde se supone que debe ir (cue rebaseall).

+0

Supongo que este puerto win32 pthreads está incluido en MinGW? – simon

+0

@simon: no solía ser, pero aparentemente es un paquete base MinGW desde 2010-02-18 (ver http://sourceforge.net/projects/mingw/files/MinGW/Base/pthreads-w32/) – Christoph

+0

@Christoph Cygwin no impone un diseño de memoria DLL fijo como tal, pero sí necesita cargar archivos DLL en un proceso bifurcado en las mismas direcciones que el elemento primario. – ak2

Cuestiones relacionadas