Fondo
Ese mensaje proviene del encabezado básico que tiene cada ejecutable de Windows (formato PE). El mensaje (y el código que lo muestra) es técnicamente editable, pero todos los compiladores parecen emitir simplemente un código que muestra la misma cadena y luego sale. Es un código ejecutable de 16 bits (como un archivo DOS .COM
), destinado a ser mostrado cuando intenta ejecutar el programa en sistemas MS-DOS o sistemas previos a Windows similares. El cargador de programas de Windows normalmente lo omite.
Explicación
Sin embargo, hay un caso en el que Windows puede mostrar ese mensaje: cuando intenta ejecutar un PE compilado para una versión más avanzada de Windows que la que está usando, especialmente si el código principal del programa es para un Arquitectura de CPU diferente a la que el sistema operativo puede soportar. (Esto es similar a, por ejemplo, tratar de ejecutar el código Win32 en DOS de 16 bits.) Desde una GUI, obtendría un error emergente, pero en la línea de comandos, puede que solo reciba ese mensaje.
El candidato obvio aquí es que está intentando ejecutar código en Windows XP (horriblemente obsoleto) y dice que está utilizando "i686- w64 -mingw32-gcc". Si está compilando binarios de 64 bits para Windows XP, es muy probable que no funcionen; Si bien técnicamente existe una versión de XP de 64 bits (en realidad es una versión de kernel diferente, 5.2 vs. 5.1, pero se marca como XP), nunca se usó ampliamente; la gran mayoría de las cajas de XP son solo de 32 bits. Si desea una comprobación rápida de 32 bits frente a 64 bits desde la línea de comandos, verifique la presencia de un directorio \Windows\SysWOW64
(que contiene binarios del sistema de 32 bits en máquinas de 64 bits); si no existe, se está ejecutando en un sistema operativo de 32 bits.
Recomendación
- A menos que A) necesite 64 bits para algo, y B) sepa que su objetivo es de 64 bits, solo use cargas de 32 bits.
- Asegúrese de que su código y el compilador estén orientados a XP (Vista y más tarde agregaron un montón de nuevas API que evitarán que un programa que las use se ejecute en XP).
- Considere girar una máquina virtual XP para probar si sus cargas útiles se ejecutan localmente antes de probarlas en la máquina de destino.