Compilar aplicaciones nativas de Windows (C/C++) en Ubuntu (WSL, Windows Subsystem Linux) y MSYS2

Requisitos

APT

sudo apt install mingw-w64 binutils-mingw-w64 binutils-mingw-w64-x86-64 g++ g++-mingw-w64 -y

PACMAN

pacman -S mingw-w64-x86_64-gcc mingw-w64-cross-binutils

Código Fuente

Ejecutable

Si el código fuente se guarda con codificación ANSI, se pueden mostrar acentos.
//test.cpp
#include <windows.h>

int APIENTRY WinMain(
 HINSTANCE hInstance, 
 HINSTANCE hPrevInstance, 
 LPSTR lpCmdLine, 
 int nCmdShow
)
{
 int respuesta = MessageBox
 (
  NULL,//Owner
  "¡Hola, Mundo! :V\n\ráéíóú",//Mensaje (Cuerpo)
  "Prueba", //Título
  MB_ICONINFORMATION | MB_YESNO | MB_DEFBUTTON1 //Apariencia
 );
 
 return respuesta == MB_OK ? ERROR_SUCCESS : ERROR_GEN_FAILURE;
}

Ícono (opcional)

//app.rc
APP_ICON ICON "app.ico"


Compilación

Ícono (Opcional)

Debe de compilarse antes que el ejecutable.
x86_64-w64-mingw32-windres app.rc -O coff -o app.res
Con MSYS2 podemos quitar el prefijo x86_64-w64-mingw32-
windres app.rc -O coff -o app.res

Ejecutable

Si queremos que nuestro ejecutable tenga un ícono, agregamos el archivo .res que compilamos del ícono.
Usamos el parámetro mwindows para indicar que se genere una aplicación GUI en lugar de consola.
x86_64-w64-mingw32-g++ -mwindows -o test.exe test.cpp app.res
g++ -mwindows -o test.exe test.cpp app.res


Resultado

Referencias

Comentarios

Entradas más populares de este blog

Lista de Regex comunes en PHP

Instalar y Cofigurar Xdebug en XAMPP y Visual Studio Code

Archivo XML de configuración de FileZilla