Anuncios Google

[encontrado]Cómo crear ejecutable para Windows desde Linux en C/C++

Bueno, a raíz del post de xXZeroXx en el cual afirmé que no se podía genera un ejecutable Window$ desde Linux. Tengo que decir que *afortunadamente* estaba equivocado.

El tema que comentaba xXZeroXx, me había dejado un "run, run" en la cabeza, así que cuando de casualidad vi que mi Debian GNU/Linux tenía un paquete llamado mingw, decidí instalarlo a ve qué pasaba...

XXXatXXXXX [dot] com:/tmp$ aptitude search mingw
p   mingw32                              - Minimalist GNU win32 (cross) compiler
p   mingw32-binutils                     - Minimalist GNU win32 (cross) binutils
p   mingw32-runtime                      - Minimalist GNU win32 (cross) runtime
p   newlib-mingw32                       - newlib C library (win32)
XXXatXXXXX [dot] com:/tmp$ sudo aptitude install mingw32
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Leyendo las descripciones de las tareas... Hecho
Se instalarán los siguiente paquetes NUEVOS:
  mingw32 mingw32-binutils{a} mingw32-runtime{a}
0 paquetes actualizados, 3 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 25,5MB de ficheros. Después de desempaquetar se usarán 119MB.
¿Quiere continuar? [Y/n/?]

Después de instalar el paquete y las dependencias, decidí ver los ejecutables que traía 

XXXatXXXXXX [dot] com:/tmp/foo$ dpkg -L mingw32 |grep /usr/bin/
/usr/bin/i586-mingw32msvc-g++
/usr/bin/i586-mingw32msvc-c++
/usr/bin/i586-mingw32msvc-gcov
/usr/bin/i586-mingw32msvc-gccbug
/usr/bin/i586-mingw32msvc-cpp
/usr/bin/i586-mingw32msvc-gcc
/usr/bin/i586-mingw32msvc-gcc-4.2.1-sjlj
/usr/bin/i586-mingw32msvc-cc

parece ser que mingw trae un montón de compiladores, decidí probar el "clásico" c++ con un hola mundo:

 

#include <iostream>
int main()
{
        std::cout << "Hola mundo!";
}

Un simple $ i586-mingw32msvc-g++ hola.cpp -o hola.exe

Bueno, se generó un ejecutable, así que use el comando file para ver si era válido:

XXXX@XXXXXX.com:/tmp/foo$ file hola.exe
hola.exe: PE32 executable for MS Windows (console) Intel 80386 32-bit

Y voilá un ejecutable nativo de Windows :D

 

En fin, que esta es una de las veces en las que uno mismo se alegra de estar equivocado. Habría que mirar el comportamiento con otras librerías como SDL ó GTK. Instalar librerías de desarrollo en Window$ (de forma nativa, no cygwin) es un suplicio, y luego dicen que es fácil.. juas Guiño. Cuando tengas 5 librerías distintas empieza a buscar rutas de enlaces que te va a dar la risa.


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de burnxez

Eureka!

Probado con un "Hello world" desde mi Arch Linux y funciona a la perfección. Sólo que el comando que debo usar para compilar es "i486-mingw32-g++ hellowindows.cpp -o hellowindows.exe" al parecer el tuyo es i586, ni idea de que sea diferente.

Pasando al tema de SDL, al intentar compilar de errores sobre que no se encuentran las librerias de SDL (tira errores diciendo que SDL_XXX no se definió) además del "tipico" -lSDL ¿Que otra forma hay para incluir librerias especificando la ruta completa?

Saludos.

Imagen de pspgorrister

A falta de make file prueba

A falta de makefile prueba con g++ PARAMETROS_QUE_SEAN `sdl-config --libs`

Ojo, son comillas invertidas

 

Imagen de burnxez

Sin suerte :(

Lo siento, pero no me va, mismos errores que al compilar mediane -lSDL -lSDL_image etc...

Saludos.

Imagen de pspgorrister

Qué te muestra un

Qué te muestra un sdl-config --libs?

Imagen de burnxez

Muestra algo raro

xxzeroxx@ArchLinux:~/Documents/C/SDL/pong++$ sdl-config --libs
-L/usr/lib -lSDL -lpthread

Mi pregunta es, donde quedarón SDL_image, SDL_ttf, SDL_mixer, etc...

Saludos

Imagen de pspgorrister

No forman parte de SDL

No forman parte de SDL oficial, hay que indicarlos con -lSDL_image, -lSDL_ttf ... etc

Imagen de burnxez

Entiendo

Pensé que se encontarian en el mismo lugar que el SDL "común" bueno bueno, por ahora me voy que salgo al cine xD mañana hecharé una ojeada a eso de como enlazar librerias usando mingw a ver si tengo suerte...

Gracias por haber encontrado esto ;-)

Saludos.

Edito: He investigado un poco y al parecer la única forma es instalando librerias SDL para compilación cruzada.

Link y Leeme

Al menos lo qu ehe entendido es que tengo que bajar, compilar instalar en Linux esos ficheros y después, usar los scripts cómo si fuera un make o configure "normal".

Si es así, y a falta de tiempo, por ahora no me quiero enredaro más, y prefiero no trastear aún, que si no, no me quito hasta hacerlo funcionar y supongo que perdería tiempo que puedo aprovechar en la programación. Por ahora me quedo con la compilación que hago en las compus de mi escuela xD

GorristeR, gracias por la ayuda, y pues, eres libre de probar, si te funciona bien me avisas ;-)

Saludos y de nuevo gracias.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.