Mingw-w64 es un conjunto de herramientas de desarrollo gratuitas y de código abierto que generan binarios ejecutables portátiles (PE) para Microsoft Windows . Fue bifurcado entre 2005 y 2010 a partir de MinGW ( Minimalista GNU para Windows ).
Mingw-w64 incluye una compilación de la Colección de Compiladores GNU (GCC) dirigida a la plataforma MinGW-w64, GNU Binutils para Windows ( ensamblador , enlazador , gestor de archivos ), un conjunto de archivos de cabecera específicos para Windows y bibliotecas de importación estática para la API de Windows , de libre distribución , una versión nativa para Windows del depurador GNU del Proyecto GNU y utilidades diversas.
Mingw-w64 se puede ejecutar de forma nativa en Microsoft Windows, alojado de forma cruzada en Linux (u otro Unix), o de forma "cross-native" en MSYS2 o Cygwin . Mingw-w64 puede generar ejecutables de 32 y 64 bits para x86 bajo los nombres de destino i686-w64-mingw32y x86_64-w64-mingw32.
Historia
En 2005, después de que el proyecto original MinGW no actualizara con prontitud su base de código para incluir nuevas API clave y soporte para 64 bits, OneVision Software comenzó a realizar ingeniería inversa de la API de Windows de 64 bits mediante un diseño de sala limpia . En 2008, OneVision donó el código a Kai Tietz, uno de sus desarrolladores principales, con la condición de que permaneciera como código abierto . [ 1 ] Inicialmente se presentó al proyecto original MinGW, pero fue rechazado bajo sospecha de utilizar información no pública o propietaria. [ 2 ] [ 1 ] [ 3 ] Por muchas razones, el desarrollador principal y cofundador del proyecto MinGW-w64, Kai Tietz, decidió no intentar una mayor cooperación con MinGW. [ 4 ]
MinGW-w64 proporciona una implementación más completa de la API de Win32 , [ 5 ] que incluye:
- Mejor soporte para C99
- Compatibilidad con subprocesos POSIX (pthreads) (incluida la posibilidad de habilitar la funcionalidad relacionada con subprocesos de C++11 en la biblioteca 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 )
- Compatibilidad con archivos grandes
- Compatibilidad con Win64
- Manejo estructurado de excepciones (SEH) en lugar de DWARF o sjlj en x86-64 (a partir de gcc 4.8+)
- Algunas herramientas útiles como
gendef(una versión mejorada de la utilidad de MinGWpexports) ywidl(un compilador MIDL de Wine).
Además, el proyecto Mingw-w64 mantiene winpthreads, una biblioteca de envoltura similar a pthreads-win32, con la principal diferencia de que permite a GCC usarla como una biblioteca de hilos, lo que da como resultado bibliotecas de hilos funcionales de C++11 <thread>, <future>y <mutex>.
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 desplegar código del mundo Unix en Windows. Cumple la misma función que el antiguo MSYS en MinGW. [ 6 ]
MSYS2 comparte este objetivo de llevar código Unix a máquinas Windows con otros proyectos, en particular Cygwin y el Subsistema de Windows para Linux (WSL). WSL permite ejecutar binarios ELF de Linux en Windows a través de una máquina virtual administrada. Cygwin proporciona un entorno POSIX completo (como una DLL de Windows ) en el que las aplicaciones, compiladas como ejecutables de Windows, se ejecutan como lo harían en Unix. [ 7 ]
En lugar de proporcionar un entorno completo como lo hace Cygwin, MSYS2 se encarga de ser una plataforma de desarrollo e implementación. [ 8 ]
- Existe un entorno principal de MSYS2 (similar al código de emulación de Cygwin, e incluso derivado de él) con gestor de paquetes y herramientas estándar del sistema Unix. De esta forma, al administrar MSYS2, se pueden usar las herramientas estándar de Unix sin modificaciones mediante el entorno emulado. También es posible instalar herramientas de compilación en el entorno emulado de MSYS2 si el usuario desea compilar software que dependa de la capa de emulación POSIX en lugar de la API nativa.
- Además, se proporcionan cuatro entornos que contienen 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 compilados con los dos entornos nativos no utilizan ningún tipo de emulación y se pueden ejecutar o distribuir como programas nativos de Windows. Los entornos son MINGW64 y MINGW32 (los entornos originales MinGW-w64 que usan gcc, msvcrt y libstdc++), UCRT64 (adaptación de MINGW64 a ucrt) y CLANG64 (adaptación de UCRT64 a clang y libc++ ). Si bien Cygwin también proporciona compiladores y bibliotecas MinGW-w64, el conjunto de bibliotecas disponibles es más pequeño y no son tan fáciles de administrar debido a que no están ubicadas en prefijos separados.
El entorno principal de MSYS2 proporciona un gestor de paquetes ( Pacman de Arch Linux ), un intérprete de comandos bash y otros programas Unix . Utiliza la biblioteca de tiempo de ejecución msys-2.0.dll (~20 MB), derivada de la biblioteca Cygwin cygwin1.dll , y se actualiza periódicamente para estar al día con el desarrollo de Cygwin. Está diseñado como un entorno de desarrollo que los desarrolladores pueden gestionar (mediante Pacman) y ejecutar sus herramientas. Se eliminan las características que se consideran innecesarias para el desarrollo. [ 8 ]
Al igual que Cygwin, MSYS2 admite la traducción de rutas para software que no es de MSYS2 y que se ejecuta desde él. Por ejemplo, se puede usar el comando notepad++ /c/Users/John/file.txtpara iniciar un editor que abrirá el archivo con la ruta de Windows C:\Users\John\file.txt. [ 9 ] [ 8 ]
Git y GNU Octave utilizan MSYS2 y su entorno bash para su distribución oficial en Windows.
Compilador
La mayoría de los lenguajes compatibles con GCC también lo son con el puerto Mingw-w64. Estos incluyen C, C++ , Objective-C , Objective-C++, Fortran y Ada . Se utilizan las bibliotecas de tiempo de ejecución de GCC (libstdc++ para C++, libgfortran para Fortran, etc.). MSYS2 también proporciona un paquete de clang de LLVM para mingw-w64. Es compatible con ARM para Windows ( aarch64-w64-mingw32y armv7-w64-mingw32). [ 10 ] [ 11 ]
Los binarios (ejecutables o DLL) generados con diferentes compiladores de C++ (como Mingw-w64 GCC y Visual Studio ) generalmente no son compatibles en cuanto al enlace debido al uso de diferentes ABI y esquemas de modificación de nombres causados por las diferencias en los entornos de ejecución de C++. Sin embargo, el código C compilado sí es compatible en cuanto al enlace. [ 12 ] Clang es una excepción, ya que en Windows admite principalmente la ABI de C++ de MSVC. [ 13 ]
La documentación de binutils contiene información actualizada sobre su manejo de varios formatos específicos de Windows y herramientas especiales para ello. [ 14 ] [ 15 ]
Referencias
- 1 2 "(MinGW-w64) Historial" . MinGW-w64 Wiki . Archivado del original el 05-07-2019 . Recuperado el 18-02-2016 .
- ↑ Danny Smith (13 de agosto de 2007). "Re: Subproyecto para encabezado w64 y crt" . Grupo de noticias : comp.gnu.mingw.devel . Usenet: 000001c7dd83$9ae74310$fe6d65da@THOMAS . Archivado del original el 23 de julio de 2020. Recuperado el 23 de julio de 2020.
Tras una revisión superficial de algunos archivos, las fuentes crt en particular parecen contener demasiado material no documentado que sospecho que puede derivarse de fuentes propietarias. Desde entonces, he evitado examinar las fuentes mingw-w64 para evitar cualquier contaminación por abuso de derechos de autor. Podría estar equivocado, pero prefiero estar seguro que poner en peligro el futuro de mingw32, que ha intentado mantener una ética de "sala limpia" durante su desarrollo.
- ↑ Marshall, Keith (19 de julio de 2009). "Re: Armonización de mingwrt / w32api con mingw-w64" . MinGW-dvlpr (Lista de correo). Archivado del original el 28 de enero de 2020. Recuperado el 12 de junio de 2014.
Sin embargo, necesitaríamos una auditoría formal del código de mingw-64 para garantizar la conformidad con nuestros requisitos de documentación verdaderamente abierta de las fuentes, antes de que [la fusión de mingw-w64] pudiera completarse.
- ↑ Tietz, Kai (20 de julio de 2014). "Re: Armonización de mingwrt / w32api con mingw-w64" . MinGW-dvlpr (Lista de correo). Archivado del original el 28 de enero de 2020. Recuperado el 12 de junio de 2014 .
- ↑ "MinGW-w64" . MinGW-w64.org. Archivado del original el 18 de octubre de 2019. Consultado el 30 de mayo de 2013 .
- ↑ "MSYS2" . www.msys2.org . Archivado del original el 7 de febrero de 2021. Consultado el 30 de septiembre de 2022 .
- ↑ "ZSH en Windows a través de MSYS2" . 26 de julio de 2018. Archivado del original el 28 de enero de 2020. Consultado el 30 de enero de 2020 .
- 1 2 3 "¿En qué se diferencia MSYS2 de Cygwin? · msys2/Msys2 Wiki" . Archivado del original el 15 de febrero de 2023. Consultado el 20 de febrero de 2023 .
- ↑ Biswas, Supriyo (29 de abril de 2017). "Cómo obtener un entorno Unix/Linux en Windows con MSYS2" . Boolean World . Archivado del original el 30 de septiembre de 2022. Consultado el 30 de septiembre de 2022 .
- ↑ "Paquete: mingw-w64-x86_64-clang" . Paquetes MSYS2 . Archivado del original el 30 de octubre de 2020. Consultado el 12 de febrero de 2020 .
- ↑ Storsjö, Martin (23 de abril de 2020). "mstorsjo/llvm-mingw" . GitHub . Archivado del original el 29 de noviembre de 2020. Recuperado el 27 de abril de 2020 .
- ↑ "Interoperabilidad de bibliotecas creadas por diferentes marcas de compiladores" . mingw.org . Archivado del original el 30/11/2020 . Consultado el 30/09/2022 .
- ↑ "Compatibilidad con MSVC" . Documentación de Clang 11. Archivado del original el 26/01/2021 . Consultado el 12/02/2020 .
- ↑ "ld: win32" . sourceware.org . Archivado del original el 14 de febrero de 2020. Consultado el 10 de febrero de 2020 .
- ↑ "Documentación de utilidades binarias de GNU" . sourceware.org . Archivado del original el 19 de febrero de 2020. Consultado el 10 de febrero de 2020 .
Enlaces externos
- MSYS2
- Bibliotecas de Windows
- MXE - Archivos Makefile para compilar MinGW en Unix y muchas bibliotecas de dependencias comunes para Win32/64; paquetes precompilados disponibles.
- Software de 2005
- Compiladores de C (lenguaje de programación)
- compiladores de C++
- Compiladores cruzados
- Compiladores de Fortran
- Compiladores libres y de código abierto
- Software de dominio público