viernes, 23 de febrero de 2018

MinGW64 disponible como complemento para ZinjaI

Finalmente logré hacerme un poco de tiempo para completar la compilación de las bibliotecas de la sección complementos con mingw64, y empaquetar todo, también al mismísimo compilador. Dejó aquí instrucciones para instalar y usar esto, junto con algunas aclaraciones importantes para quienes no tengan del todo claro qué implica el cambio de compilador.

Nota obvia: Este post es solo para quienes utilizan ZinjaI en Windows; ya que en GNU/Linux el compilador no depende de ZinjaI, sino de la distribución de GNU/Linux que se use.


1. Selección del toolchain

Para compilar aplicaciones de 64bits, seguiremos utilizando ZinjaI de 32 (una aplicación de 32 corre sin problemas cualquier sistema de 64). Para el caso, ZinjaI no es mucho más que un editor de texto, así que no es importante si es de 32 o 64. El detalle es que el instalador de ZinjaI instala un compilador que solo genera aplicaciones de 32bits (MinGW). En algún momento armaré un instalador alternativo con el paquete de 64bits; pero de momento lo que hay que hacer es instalar el compilador alternativo (MinGW-w64) como complemento (disponible aquí).

Una vez instalado mingw64, en ZinjaI podrán optar entre utilizar un compilador u otro. Las reglas son las siguientes: hay un toolchain por defecto que se utiliza para el modo programa simple, y para los proyectos que no hayan configurado un toolchain alternativo (por defecto, todos). Se define cuál es ese toolchain desde la pestaña "Programa/Proyecto" del cuadro de "Preferencias". Allí verán las opciones "mingw32-gcc6" (la que viene por defecto en el instalador) y ahora "mingw64-gcc7" (la que agrega el nuevo complemento). Deben seleccionar la segunda para usar el nuevo compilador.



2. Configuración del perfil

Alternativamente, un proyecto puede definir un toolchain específico en lugar de caer en el predefinido desde las preferencias. Esto se hace desde la pestaña "Secuencia" del cuadro de "Opciones de Compilación y Ejecución" (menú "Ejecución"->"Opciones..."). Si allí dice "<predeterminado>" o "<default>", ZinjaI utilizará el que se define en "Preferencias" (que puede variar de una instalación a otra). Si seleccionan uno en particular, el proyecto siempre querrá utilizar ese.


Un detalle importante que debería resultar obvio es el siguiente: no se debe/puede mezclar en una compilación pedazos de ejecutable (archivos .o) generados con un compilador, con pedazos generados con el otro. Entonces, si ya habían comenzado a compilar el proyecto con un mingw, antes de utilizar el otro deben: o bien borrar los "pedazos" compilados previamente (menú "Ejecución"->"Limpiar"), o bien cambiar el directorio de temporales (pestaña "Compilación"). Eventualmente puede generar un segundo perfil de compilación "Debug_Win64", similar al "Debug_Win32" para simplificar las idas y vueltas.



2. Bibliotecas

Al igual que los .o, los binarios de las bibliotecas también deben coincidir con el toolchain que se utilice. Esto significa que si instalaron una biblioteca o complemento para 32bits, deberán conseguir una versión alternativa para 64. Para cada complemento Windows-dependiente del sitio de ZinjaI, he compilado y subido una versión de 64bits, así que podrán simplemente instalar los nuevos complementos de SFML, wxWidgets, Box2d, OpenCV, etc. Los headers y binarios del complemento van a la carpeta del toolchain al que le apuntan, así que pueden instalar ambas versiones (32 y 64 bits) sin que eso traiga problemas.


Entonces ahora pueden utilizar MinGW64 desde ZinjaI fácilmente (ya se podía antes, pero había que montar todo a mano). ¿Por qué preferir mingw64? Para un alumno que está empezando, probablemente no halla ninguna diferencia importante, así que puede evitarse la molestia. Pero la versión de 64 tiene algunas ventaja para usos más específicos. MinGW64 implementa la biblioteca "threads" (para paralelismo, estándar desde C++11, pero no soportada por mingw32); las aplicaciones de 64bits pueden consumir mucha memoria si la necesitan (las de 32 tienen un límite de 2GB); y finalmente, muchas bibliotecas externas (como QT por ej.) tienen mejor soporte para mingw64.

Todo esto es nuevo, tal vez si lo empezamos a usar en masa descubramos pequeños problemas. Trataré de ir solucionándolos a medida que aparezcan, y de mantener ambas versiones de complementos a la par.

No hay comentarios:

Publicar un comentario