Mingw-w64 es un entorno de desarrollo de software de código abierto y gratuito para crear aplicaciones de Microsoft Windows PE . Se bifurcó en 2005-2008 de MinGW ( Minimalist GNU para Windows ).
Autor (es) original (es) | Software OneVision |
---|---|
Desarrollador (es) | Kai Tietz, Jonathan Yong, varios colaboradores de GNU |
Versión inicial | 2005 |
Lanzamiento estable | 9.0.0 / 22 de mayo de 2021 |
Escrito en | C , C ++ |
Sistema operativo | Microsoft Windows , Linux , macOS |
Tipo | Compilador |
Licencia | Dominio público (encabezados), Licencia pública general GNU (compilador y cadena de herramientas), Licencia pública de Zope |
Sitio web | mingw-w64 |
Mingw-w64 incluye un puerto de GNU Compiler Collection (GCC), GNU Binutils para Windows ( ensamblador , enlazador , administrador de archivos ), un conjunto de archivos de encabezado específicos de Windows libremente distribuibles y bibliotecas de importación estáticas que permiten el uso de la API de Windows , una compilación de Windows nativo del Proyecto GNU 's GNU depurador , y diversos servicios públicos.
Mingw-w64 se puede ejecutar en la plataforma nativa de Microsoft Windows, con alojamiento cruzado en Linux (u otro Unix) o "entre nativos" en MSYS2 o Cygwin . Mingw-w64 puede generar ejecutables de 32 y 64 bits para x86 con los nombres de destino i686-w64-mingw32
y x86_64-w64-mingw32
.
Historia
En 2005, OneVision Software creó Mingw-w64 bajo principios de diseño de sala limpia , ya que el proyecto MinGW original no fue rápido para actualizar su base de código, incluida la inclusión de varias API nuevas clave y el tan necesario soporte de 64 bits. En 2008, OneVision luego donó el código a Kai Tietz, uno de sus desarrolladores principales, con la condición de que siguiera siendo de código abierto. [1] Primero se envió al proyecto MinGW original, pero se rechazó bajo sospecha de uso de información privada o no pública. [2] [3] [4] Por muchas razones, el desarrollador principal y cofundador del proyecto MinGW-w64, Kai Tietz, decidió no intentar una mayor cooperación con MinGW. [5]
MinGW-w64 proporciona una implementación de API Win32 más completa, [6] que incluye:
- Mejor soporte C99
- Compatibilidad con subprocesos POSIX (pthreads) (incluida la posibilidad de habilitar la funcionalidad relacionada con subprocesos C ++ 11 en libstdc ++ de GCC )
- GCC multilib, que permite a los usuarios instalar bibliotecas de 32 y 64 bits en paralelo
- Punto de entrada Unicode (wmain / wWinMain)
- DDK (de ReactOS )
- DirectX (de Wine )
- Soporte de archivos grandes
- Soporte Win64
- Manejo de excepciones estructurado (SEH) en lugar de DWARF o sjlj en x86-64 (de gcc 4.8+)
- Algunas herramientas útiles como
gendef
(una versión mejorada de lapexports
utilidad de MinGW ) ywidl
(un compilador MIDL de Wine).
Además, el proyecto Mingw-w64 mantiene winpthreads, una biblioteca de envoltura similar a pthreads en Win32, con la diferencia principal de que permite GCC usarlo como una biblioteca de hilos resultante en C ++ funcional bibliotecas 11 de rosca
,
y
.
MSYS2
MSYS2 ("sistema mínimo 2") es una distribución de software y una plataforma de desarrollo para Microsoft Windows , basada en Mingw-w64 y Cygwin , que ayuda a implementar código del mundo Unix en Windows. Desempeña el mismo papel que el antiguo MSYS en MinGW. [7]
MSYS2 comparte este objetivo de llevar el código Unix a las máquinas con Windows con varios otros proyectos, sobre todo Cygwin y el Subsistema de Windows para Linux (WSL). WSL permite que los binarios ELF de Linux se ejecuten en Windows, con soporte limitado para llamadas al kernel y limitaciones significativas en aplicaciones gráficas. Cygwin proporciona un entorno POSIX completo (como una DLL de Windows ) en el que las aplicaciones, compiladas como EXE de Windows, se ejecutan como lo harían en Unix. [8]
En lugar de proporcionar un entorno completo como lo hace Cygwin, MSYS2 se encarga de ser una plataforma de desarrollo e implementación. [9] MSYS2 instala 3 conjuntos de entornos, cada uno con un conjunto separado de programas y bibliotecas. Dos de ellos, llamados MinGW-w64 de 32 bits y MinGW-w64 de 64 bits, se componen simplemente de compiladores nativos, herramientas de compilación y bibliotecas que se pueden usar directamente para compilar programas nativos de Windows de 32 o 64 bits. Los programas finales construidos con los dos entornos nativos no utilizan ningún tipo de emulación y pueden ejecutarse o distribuirse como programas nativos de Windows. El tercer entorno instalado, llamado MSYS2, proporciona en cambio un entorno POSIX emulado, como Cygwin, con un administrador de paquetes y herramientas estándar del sistema Unix. De esta manera, al administrar MSYS2 en sí, las herramientas estándar de Unix se pueden usar sin modificaciones mediante el uso del entorno emulado. También es posible instalar herramientas de compilación en el entorno emulado MSYS2 en caso de que el usuario desee compilar software que dependa de la capa de emulación POSIX en lugar de la API nativa.
El entorno principal MSYS2 proporciona un administrador de paquetes ( Pacman de Arch Linux ), un shell bash y otros programas Unix . Utiliza una biblioteca en tiempo de ejecución msys-2.0.dll (~ 20 MB) que se deriva de la biblioteca Cygwin cygwin1.dll , y se actualiza periódicamente para realizar un seguimiento del desarrollo de Cygwin. Está pensado como un entorno de desarrollo, uno que los desarrolladores pueden administrar (usando pacman) y ejecutar sus herramientas. Se eliminan las funciones que se consideran innecesarias para el desarrollo. [9]
Al igual que con Cygwin, MSYS2 admite la traducción de rutas para software que no sea MSYS2 iniciado desde él. Por ejemplo, se puede usar el comando notepad++ /c/Users/John/file.txt
para iniciar un editor que abrirá el archivo con la ruta de Windows C:\Users\John\file.txt
. [10] [9]
Git y GNU Octave utilizan MSYS2 y su entorno bash para su distribución oficial de Windows.
Compilador
La mayoría de los idiomas admitidos por GCC también son compatibles con el puerto Mingw-w64. Estos incluyen C, C ++ , Objective-C , Objective-C ++, Fortran y Ada . Se utilizan las bibliotecas en tiempo de ejecución de GCC (libstdc ++ para C ++, libgfortran para Fortran, etc.). MSYS2 también proporciona un paquete del clang de LLVM a mingw-w64. Es compatible con ARM para Windows ( aarch64-w64-mingw32
y armv7-w64-mingw32
). [11] [12]
Los binarios (ejecutables o DLL) generados con diferentes compiladores de C ++ (como Mingw-w64 GCC y Visual Studio) en general no son compatibles con enlaces debido al uso de diferentes ABI y esquemas de alteración de nombres causados por las diferencias en los tiempos de ejecución de C ++. Sin embargo, el código C compilado es compatible con enlaces. [13] Clang es una excepción, ya que principalmente admite la ABI de C ++ de MSVC en Windows. [14]
La documentación de binutils tiene información actualizada sobre su manejo de varios formatos específicos de Windows y herramientas especiales para hacerlo. [15] [16]
Referencias
- ^ "Historia (MinGW-w64)" . Wiki de MinGW-w64 . Consultado el 18 de febrero de 2016 .
- ^ Danny Smith (13 de agosto de 2007). "Re: sub proyecto para w64 header & crt" . Grupo de noticias : comp.gnu.mingw.devel . Usenet: 000001c7dd83 $ 9ae74310 $ fe6d65da @ THOMAS . Consultado el 23 de julio de 2020 .
A partir de una verificación superficial de algunos archivos, las fuentes crt en particular parecen contener demasiado material indocumentado que sospecho que puede derivar de fuentes patentadas. Desde entonces he evitado mirar las fuentes de mingw-w64 para evitar cualquier mancha de abuso de derechos de autor. Bien podría estar equivocado, pero preferiría estar a salvo que poner en peligro el futuro del mingw32, que ha intentado mantener una ética de "sala limpia" durante su desarrollo.
- ^ "(MinGW-w64) Historial" . Wiki de MinGW-w64 . Consultado el 18 de febrero de 2016 .
- ^ Marshall, Keith (19 de julio de 2009). "Re: armonizar mingwrt / w32api con mingw-w64" . MinGW-dvlpr (lista de correo) . Consultado el 12 de junio de 2014 .
Sin embargo, necesitaríamos una auditoría formal del código mingw-64, para asegurar la conformidad con nuestros requisitos para la documentación verdaderamente abierta de las fuentes, antes de que [fusión de mingw-w64] pudiera completarse.
- ^ Tietz, Kai (20 de julio de 2014). "Re: armonizar mingwrt / w32api con mingw-w64" . MinGW-dvlpr (lista de correo) . Consultado el 12 de junio de 2014 .
- ^ "MinGW-w64" . MinGW-w64.org . Consultado el 30 de mayo de 2013 .
- ^ MSYS2: página de inicio oficial , repositorio de código
- ^ https://medium.com/@borekb/zsh-via-msys2-on-windows-3964a943b1ce
- ^ a b c https://github.com/msys2/msys2/wiki/How-does-MSYS2-differ-from-Cygwin
- ^ Ejemplo tomado del artículo de descripción general https://www.booleanworld.com/get-unix-linux-environment-windows-msys2
- ^ "Paquete: mingw-w64-x86_64-clang" . Paquetes MSYS2 . Consultado el 12 de febrero de 2020 .
- ^ Storsjö, Martin (23 de abril de 2020). "mstorsjo / llvm-mingw" .
- ^ http://mingw.org/wiki/Interoperability_of_Libraries_Created_by_Different_Compiler_Brands
- ^ "Compatibilidad con MSVC" . Documentación de Clang 11 .
- ^ "ld: win32" . sourceware.org .
- ^ "Documentación de utilidades binarias GNU" . sourceware.org .
enlaces externos
- sitio web oficial de Mingw-w64
- sitio web oficial de MSYS2