Compilacion Cruzada
Compilacion Cruzada
Compilacion Cruzada
http://pintucoperu.wordpress.com/2008/03/16/compilacion-cruzada-usand...
Blog de Abelardo Jara Berrocal: Ubuntu, electronica y software libre Consejos para Ubuntu, electronica y software libre
Buscar en este Blog
Inicio Acerca de m Usando Fluxbuntu para herramientas Xilinx ISE 9.2 desde lnea de comandos ImageMagick: Capturador de pantallas y conversor de imgenes ligero para Fluxbuntu 16 mar
Compilacin cruzada: usando Ubuntu para compilar programas .exe para Windows
Posted marzo 16, 2008 by Abelardo Jara in Programacion C++ en Linux, Programacion C++ en Windows. 9 comentarios
Crditos
Autor: Hugo Ruscitti Fecha: 31 de Agosto del 2006
Introduccin
Este trabajo presenta una serie de consejos e indicaciones sobre como generar programas multimedia para Windows desde un sistema operativo como GNU/Linux. Dado que la temtica que trataremos es de cierta complejidad, he decidido no crear una referencia completa sobre las herramientas que utilizaremos, en su lugar intentar abordar el asunto de manera prctica, creando ejemplos de aplicaciones funcionales. De esta forma podr conocer los componentes mas elementales del proceso y ver sus resultados inmediatos.
El por qu de la cuestin
GNU/Linux cuenta con una extensa galera de recursos para quienes disfrutamos de la programacin. Entre aplicaciones y bibliotecas, GNU/Linux ofrece un entorno confortable y flexible, incluso, para desarrolladores de aplicaciones multimedia. Una herramienta para programadores muy interesante es Mingw (Minimalistic GNU for Windows), que naci con la intensin de adaptar varias herramientas de desarrollo del sistema GNU a entornos Windows. Si bien encontrar varios usos para Mingw, aqu lo utilizaremos para lograr que nuestro sistema GNU pueda generar archivos ejecutables para sistemas Windows. En general, a este proceso de exportar aplicaciones a otros sistemas o arquitecturas se lo denomina cross-building, cross-compile, o como decidimos llamarlo en este artculo: compilacin cruzada. Este recurso de soporte a otros sistemas nos permite ampliar nuestras posibilidades de crear programas Multiplataforma, sin cambiar de sistema y utilizando siempre Software Libre.
Requisitos
Para seguir este tutorial le recomiendo contar con algunas herramientas que veremos mas adelante: gcc, mingw y wine. Muchas distribuciones de GNU/Linux cuentan con sistemas administradores de paquetes que le permiten instalar y desinstalar programas con facilidad, por ese motivo no debera tener problemas en comenzar a probar los ejemplos de este artculo. El proceso de instalacin en mi sistema Debian GNU/Linux llev unos pocos segundos. Si utiliza este mismo sistema, u otro basado en l como Ubuntu o Knoppix, ejecute como usuario administrador (root) 1: apt-get install mingw32 El sistema de paquetes `apt` le informar que necesita instalar, como mnimo, otros 2 paquetes llamados `mingw32-
1 de 9
18/01/11 22:56
http://pintucoperu.wordpress.com/2008/03/16/compilacion-cruzada-usand...
runtime` y `mingw32-binutils`. Indique S y contine. Si todo sale bien obtendr un mensaje como: Congurando mingw32-binutils (2.15.94-20050118.1-1) Congurando mingw32-runtime (3.7-1) Congurando mingw32 (3.4.2.20040916.1-2) En cambio, si se le presenta algn tipo de problema puede recurrir a las versiones en cdigo fuente disponibles en el sitio oficial de Mingw, o bien, obtener un entorno de compilacin completo en el sitio de la biblioteca SDL.
2 de 9
18/01/11 22:56
http://pintucoperu.wordpress.com/2008/03/16/compilacion-cruzada-usand...
llama Wine, y se incluye en numerosos repertorios de programas. En el caso de las distribuciones basadas en Debian GNU/Linux es probable que necesite instalarlo mediante el sistema `apt`. Para ello ejecute como administrador del sistema (root) el siguiente comando: apt-get install wine winesetuptk El segundo programa (winesetuptk) se utiliza para definir los parmetros de configuracin de wine de manera sencilla. Cuando termine de instalar el programa podr correr aplicaciones diseadas para sistemas Windows desde su sistema GNU invocando a los comandos: wine: para cargar y ejecutar programas grficos. wineconsole: para cargar y ejecutar programas de consola. Para verificar que nuestro programa `hola.exe` funciona mediante wine podemos ejecutar: wineconsole hola.exe Note que los programas para Windows suelen clasificarse en dos grupos: los programas de `consola` y las aplicaciones `grficas`. Aqu comenc con un programa sencillo para mostrar que puede compilarlo tanto para GNU como Windows, este primer ejemplo es un programa de `consola`. Analicemos otro ejemplo; en la documentacin del programa MinGW existe un programa que utiliza rutinas propias de los sistemas Windows. Lo utilizaremos para mostrar como funciona Wine con un programa grfico. Cdigo fuente: hello.c #include <windows.h> int main(int argc, char *argv[]) { MessageBox(NULL, Hello, world!, Hello, world!, MB_OK); return 0; } Si genera un archivo ejecutable en base a este programa grfico mediante Mingw32 , luego podr invocar al programa wine como se muestra a continuacin: wine hello.exe Obteniendo en pantalla: Si bien este no es un programa de `consola` debera tener en cuenta que en los sistemas Windows aparecer, de todas maneras, una pantalla de `consola`. Para evitar que esto ocurra debe indicarle a MinGW que el programa ser completamente `grfico` mediante la opcin `-mwindows`: -mwindows
Utilizando bibliotecas
MinGW tambin puede establecer vnculos entre nuestros programas y diversas bibliotecas dinmicas, simplemente debe obtener las bibliotecas de desarrollo que necesite, colocarlas en el directorio adecuado e indicarle a MinGW que las utilizar. Para mostrar esta posibilidad tomaremos como ejemplo un programa multimedia que utiliza la biblioteca SDL llamado Mouse. Primero instalaremos el entorno de desarrollo, luego generamos el programa y por ltimo analizaremos su funcionamiento mediante `wine`.
3 de 9
18/01/11 22:56
http://pintucoperu.wordpress.com/2008/03/16/compilacion-cruzada-usand...
exit Si por algn motivo quiere alterar el directorio de instalacin de la biblioteca deber editar el archivo Makefile incluido en el directorio SDL-1.2.10 y reemplazar la linea: CROSS_PATH := /usr/local/cross-tools/i386-mingw32msvc/
En caso de errores
Si el proceso de compilacin falla indicando que no se encuentran las cabeceras SDL.h, posiblemente se deba a un error del script `sdl-cong`. Note que las bibliotecas SDL se suelen instalar dentro de un directorio llamado include o include/SDL , el script `sdl-cong` debe indicar con precisin el lugar exacto en donde residen estos archivos. Lamentablemente he notado que la versin actual de sdl-config no indica correctamente la ruta de estos archivos .h en mi sistema. Si en su equipo ocurre lo mismo intente editar el archivo /usr/local/cross-tools/i386-mingw32msvc /bin/sdl-config como administrador de sistema (root) y cambie la linea: echo -I${prefix}/include/SDL -D_GNU_SOURCE=1 -Dmain=SDL_main
4 de 9
18/01/11 22:56
http://pintucoperu.wordpress.com/2008/03/16/compilacion-cruzada-usand...
por: echo -I${prefix}/include -D_GNU_SOURCE=1 -Dmain=SDL_main Si el problema persiste no dude en consultarlo en nuestro foro de mensajes. Otro problema muy frecuente en la utilizacin de esta biblioteca se encuentra en la inclusin del archivo SDL.h al cdigo de nuestro programa. La forma mas adecuada de incluir este archivo es mediante: #include SDL.h Es cierto que existen muchas formas de indicar la ruta a un archivo como este (SDL/SDL.h, sdl.H etc.), aunque sera deseable que adopte solo aquella forma que le brinda mayores posibilidades de generar el programa en diferentes sistemas sin cambiar una sola linea del programa.
Bibliotecas Adicionales
SDL cuenta con una serie de bibliotecas adicionales para brindar soporte a otras tareas como utilizar ficheros SVG (formato de imgenes vectoriales), MP3 (msica), GUI (interfases visuales), etc. Aadir estas bibliotecas a su proyecto es muy sencillo, solo debe obtener las bibliotecas de desarrollo que necesite para sistemas Windows (o aquellas indicadas para mingw32 ) y ubicar los archivos .h dentro del directorio: /usr/local/cross-tools/i386-mingw32msvc/include/ Luego necesitar copiar los archivos de biblioteca (.a/.la) en: /usr/local/cross-tools/i386-mingw32msvc/lib/ Por ltimo, no olvide que los usuarios de sus aplicaciones necesitarn tener los archivos .dll en su sistema a la hora de ejecutar los programas.
Conclusin
GNU/Linux incluye una extensa coleccin de programas interesantes para todo tipo de usuarios. A mi entender, Mingw es una herramienta indispensable para aquellos programadores que estudiamos el desarrollo de programas libres y Multiplataforma. Aqu solo hemos visto el principio de la historia
Licencia
Se permite la copia, modificacin y distribucin de este artculo slo bajo los trminos de la Licencia Creative Commons. Los programas de ejemplo se distribuyen bajo la licencia GPL.
Notas
1 En distribuciones como Ubuntu puede ejecutar `sudo apt-get ` como usuario normal. Ads by Google
5 de 9
18/01/11 22:56
http://pintucoperu.wordpress.com/2008/03/16/compilacion-cruzada-usand...
Eficiencia De Negocios
Descubra Las Herramientas Que IBM Tiene Para Rentabilizar Su Empresa ibm.com
Like
6 de 9
18/01/11 22:56
http://pintucoperu.wordpress.com/2008/03/16/compilacion-cruzada-usand...
bye Responder 7. Publicado por welman en junio 29, 2009 at 3:27 pm Hola! No soy experto en programacin, y lo que necesito es compilar un programa escrito en fortrar90 a .exe para ejecutarlo en windows vista. Te dejo mi correo para que me puedas escribir y enviarte el proyecto en fortran y me ayudes por favor. wcrosa@fgr.gob.sv o welman_16@hotmail.com Responder 8. Publicado por Wosquex en noviembre 7, 2009 at 4:46 am Excelente post maestro!!! Saludos y adelante con ms posts como este!!! Responder 9. Publicado por Francisco en marzo 16, 2010 at 2:57 pm Muchas gracias. Responder
Deja un comentario
Tu direccin de correo electrnico no ser publicada. Los campos necesarios estn marcados * Nombre * Correo electrnico * Web
Publicar comentario
Recibir siguientes comentarios por correo. Recibir nuevas entradas por email.
Pginas
Acerca de m
Administracion
Registrarse Acceder RSS de las entradas
7 de 9
18/01/11 22:56
http://pintucoperu.wordpress.com/2008/03/16/compilacion-cruzada-usand...
Elegir categora
Entradas recientes
Como enviar correos electronicos desde la linea de comando con sendemail en Ubuntu Encuesta: Habilitar chat de Facebook (XMPP) en Empathy (Ubuntu) Colocar un fondo de escritorio animado en Ubuntu Karmic y Lucid con Xwinwrap Mi primer video de Ubuntu usando OpenShot Que son las variables volatile y para que sirven? Mantener una coleccion ordenada de articulos tecnicos: usando Mendeley en Ubuntu Tutorial: Congurar EMACS como editor completo para C/C++, Python y VHDL (incluye conguracion del navegador con w3m, blogging con weblogger y correo con wanderlust) Instalar Google Earth 5 en Ubuntu e integrarlo con tu tema GTK preferido Simulador Modelsim 6.2 SE NATIVO para Ubuntu Linux 32 y 64 Instalar fuentes de Office 2007 en Ubuntu Tema de KDE 4 para Gnome Como empezar a programar microcontroladores PIC en Ubuntu Hardy Instalar MARS: ensamblador y simulador del procesador MIPS para cursos de Arquitectura de Computadoras en Ubuntu Usando el compilador de Microsoft Visual C++ 2005/2008 en Ubuntu Linux Extraer el contenido de un archivo RPM sin instalar en Ubuntu Instalar LabView 8.5 en Ubuntu Hardy y posteriores Uso de los paquetes .diff.gz para compilar aplicaciones en Linux/Ubuntu Optimizar el uso de bateria en Ubuntu Windows 7 vs Windows Vista vs Ubuntu Cambiar el nombre de cuenta de usuario en Ubuntu: Una forma sencilla Compilador online de codigo
Entradas mensuales
Elegir mes
Posts Ms Vistos
Cambiar el nombre de cuenta de usuario en Ubuntu: Una forma sencilla Generar archivo distribuible JAR en Netbeans Unir varios PDFs en Ubuntu Como usar SCP, el complemento de SSH para transmitir archivos y carpetas Un plugin muy rapido para descargar videos del YouTube Reparar memoria USB con Ubuntu Instalar LabView 8.5 en Ubuntu Hardy y posteriores Como crear servidor de repositorios Ubuntu/Debian para nuestra red local Habilitar chat de Facebook (XMPP) en Empathy (Ubuntu) Instalar Matlab 7 R14 en Fluxbuntu/Ubuntu Gutsy - Actualizacion a Matlab 2008b para Linux Tutorial: Configurar EMACS como editor completo para C/C++, Python y VHDL (incluye configuracion del navegador con 'w3m', blogging con 'weblogger' y correo con 'wanderlust') Expresiones Regulares en la shell: Ejemplos de uso con grep, awk y sed.
Comentarios recientes
antonio on Los estados de un proceso en U relajaoo on Codicar con script de bash t calomx on Mantener una coleccion ordenad Luciano on Como enviar correos electronic calomx on Mantener una coleccion ordenad
Blog Stats
8 de 9 18/01/11 22:56
http://pintucoperu.wordpress.com/2008/03/16/compilacion-cruzada-usand...
marzo 2008 L M X J V S D 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 feb may Blog de WordPress.com. Theme: Spring Loaded by the449.
9 de 9
18/01/11 22:56