MinGW

De Viquipèdia
Salta a la navegació Salta a la cerca
Infotaula de programariMinGW
Creador/s Colin Peters
Versió inicial 1r juliol 1998
Versió estable 4.8.1-4 (11 octubre 2013)
Versió prèvia 0.6.2-beta-20131004-1 (4 octubre 2013)
Escrit en C
Sistema operatiu Microsoft Windows
Plataforma Java
Tipus compilador
Llicència GNU GPL
Més informació
Lloc web Web oficial
Stack Exchange Etiqueta
SourceForge mingw
Modifica les dades a Wikidata

MinGW (Minimalist GNU for Windows), anteriorment conegut com a MinGW32, és una implementació dels compiladors GCC per a la plataforma Win32, que permet migrar la capacitat d'aquest compilador en entorns Windows. És un fork de Cygwin en la seva versió 1.3.3. A més MinGW inclou un conjunt de la API de Win32, permetent un desenvolupament d'aplicacions natives per a aquesta plataforma, podent generar executables i biblioteques usant la API de Windows.[1]

Història[modifica]

MinGW va ser creat per Colin Peters, l'1 de juliol de 1998, compilant-ho amb Cygwin.[2] MinGW es deia originàriament mingw32; es van llevar els nombres del nom per evitar la implicació que tindria el limitar-ho a sistemes de 32 bits.[3] La primera versió nativa per Windows de MinGW va ser realitzada per Jan-Jaap van der Heijden, qui també va tenir participació en el projecte GCC; afegint també binutils i make. Mumit Khan va estar a càrrec del manteniment del projecte i va incloure al compilador algunes característiques pròpies de Windows. Els arxius de capçalera del API de Windows van ser proveïts per Anders Norlander. L'any 2000, el projecte es va traslladar a Sourceforge.net per demanar assistència de la comunitat i centralitzar el seu desenvolupament.

MinGW va ser seleccionat com Project of the Month a SourceForge el setembre de 2005.[4]

Característiques[modifica]

Suport de llenguatge de programació[modifica]

Per a llenguatges de programació diferents de C, MinGW utilitza les biblioteques de temps d'execució GNU (per exemple, GNU libstdc ++ per a C++).[cal citació]

No obstant això, com GCC no proporciona la seva pròpia biblioteca C de temps d'execució, el compilador C de MinGW té com a objectiu l'antiga Biblioteca de temps d'execució de C Visual de Microsoft, MSVCRT, que va ser llançat en 1998 i per tant, no inclou suport per a funcions de C99 (menys encara C89); mentre l'estar dirigit a MSVCRT suposa produir programes tan natius com és possible, la falta de suport de C99 ha causat problemes de portabilitat, particularment pel que concerneix els especificadors de conversió d'estil printf. Aquestes qüestions han estat parcialment atenuades per la implementació d'una biblioteca de compatibilitat de C99, libmingwex, però l'àmplia labor requerida està lluny de completar-se i no sembla que pugui realitzar-se plenament.[5]

Components de MinGW[modifica]

El projecte de MinGW manté i distribueix un nombre de diferents components i paquets complementaris, inclosos els diversos ports de GNU toolchain, tals com GCC i binutils, traduït en paquets equivalents. Aquestes utilitats poden utilitzar-se des de la línia de comandos de Windows o integrades en un IDE.[6] MinGW admet biblioteques nomenades d'acord amb els convenis "<name>.lib" i "<name>.dll" a més de l'habitual convenció "lib<name>.a" comú en sistemes UNIX-like.

A més, un component de MinGW, conegut com a MSYS (Minimal SYStem) proporciona ports de win32 d'un entorn de shell lleuger de tipus Unix que inclou rxvt i una selecció d'eines POSIX suficients per permetre a les seqüències de comandos (scripts) de autoconf executar-se.[7][8]

Els mingwPORTs són afegits d'usuari (contribucions) a la col·lecció de programari MinGW. En lloc de proporcionar aquests "complements" com a paquets binaris precompilados, se subministren en forma de scripts interactius de shell Bourne, que guia a l'usuari final a través del procés de descàrrega i revisions del codi font original automàticament, per a continuació compilar-ho i instal·lar-ho. Els usuaris que desitgin construir qualsevol aplicació des d'un mingwPORT han d'instal·lar primer MinGW i CYGWIN.[9][10]

L'execució d'arxius d'encapçalat de Win32 i biblioteques d'importació de Win32 per vincular el temps d'execució són alliberats sota una llicència permissiva, mentre que els ports de GNU s'alliberen sota llicència GNU.[11] Estan disponibles al lloc web de MinGW descàrregues binàries del paquet complet de CYGWIN i utilitats de GNU MinGW individuals.

Comparació amb Cygwin[modifica]

MinGW va sorgir d'una bifurcació de la versió 1.3.3 de Cygwin. Encara que Cygwin i MinGW poden utilitzar-se per portar programari d'Unix a Windows, tenen diferents enfocaments: Cygwin pretén oferir una capa POSIX completa (similar a l'oposada en altres sistemes d'Unix o Linux) de Windows, sacrificant el rendiment quan sigui necessari per optimitzar la compatibilitat.[12] En conseqüència, aquest enfocament requereix programes Win32 escrits amb Cygwin per executar sobre una biblioteca de compatibilitat copyleftada que deu ser distribuïda amb el programa, juntament amb el codi font del mateix. MinGW pretén proporcionar funcionalitat nativa i rendiment a través de trucades a la API de Windows directament. A diferència de Cygwin, MinGW no requereix una capa de compatibilitat DLL i per tant els programes no necessiten distribuir-se amb el codi font.

Com MinGW depèn de trucades a la API de Win32, no pot proporcionar una API completa POSIX; és incapaç de compilar algunes aplicacions d'Unix que es poden compilar amb Cygwin. Específicament, això s'aplica a les aplicacions que requereixen la funcionalitat POSIX com fork(), mmap() o ioctl() i aquells que s'espera poder executar en un entorn de POSIX. Les aplicacions escrites amb una biblioteca de plataforma creuada que sí s'han portat a MinGW, com SDL, wxWidgets, Qt, o GTK+ se solen compilar fàcilment en MinGW com es faria en Cygwin.

La combinació de MinGW i CYGWIN proporciona un entorn petit i independent que pot carregar-se en mitjans extraïbles sense deixar entrades en el registre de Windows o arxius en l'equip. En proporcionar més funcionalitat, Cygwin és més complicat d'instal·lar i mantenir.

Referències[modifica]

Enllaços externs[modifica]