Cómo compilar programas de Linux en Windows con Cygwin

Cómo compilar programas de Linux en Windows con Cygwin

cygwin-logo-200pxWindows y Linux son dos sistemas muy diferentes y, como tales, a menudo no es fácil transferir programas escritos para uno al otro, especialmente cuando se trata de programas GUI. Aunque hay muchas bibliotecas multiplataforma y SDK diferentes, los programas nativos escritos sin tener en cuenta la portabilidad son bastante difíciles de portar.

Cuando se trata de compilar y ejecutar programas escritos para Linux en Windows, existe una solución conocida como Cygwin. El proyecto Cygwin es una colección de las herramientas y compiladores más comunes (incluido el shell bash y la cadena de compiladores GNU) para Windows. También incluye una biblioteca que proporciona una capa de compatibilidad para que se puedan compilar los programas que llaman a las API específicas de Linux. Cygwin no es un emulador ni una máquina virtual, y no permite que los binarios de Linux se ejecuten en Windows sin volver a compilarlos primero.

Visita el Página de instalación de Cygwin y descargue el ejecutable de instalación de 32 o 64 bits (según la variante de Windows que esté utilizando). Ejecute el programa de instalación. Haga clic en Siguiente y Siguiente nuevamente (para «Instalar desde Internet»). El directorio predeterminado es “C:\cygwin”. Se puede cambiar si es necesario, pero a menos que tenga una razón específica para cambiarlo, el valor predeterminado es el mejor. Haga clic en Siguiente, Siguiente y Siguiente de nuevo.

El proyecto Cygwin tiene sitios espejo en todo el mundo; elija uno que crea que se adapta mejor a su ubicación y haga clic en Siguiente. Ahora debe elegir qué paquetes instalar. Para compilar programas sencillos de Linux en Windows, necesitará la Cadena de compilación GNU (GCC), que proporciona un compilador de C y C++.

Cygwin-select-paquetes

Escriba «gcc» en el cuadro de búsqueda y luego haga clic en el pequeño signo más junto a «Desarrollo» en la lista de paquetes. Busque «gcc-core» y «gcc-g++» y haga clic en «Omitir» para cada uno. La palabra «Omitir» cambiará a un número de versión y el signo «n/a» en el mensaje «¿Bin?» columna se convertirá en una casilla marcada. Escriba «hacer» en el cuadro de búsqueda y busque «hacer» en «Desarrollo». Haga clic en «Omitir» para marcarlo para la instalación. Busque «wget» y también márquelo para instalar desde «Web». Para construir el siguiente ejemplo, también necesitaremos «libiconv;» búsquelo y márquelo para instalarlo.

Cygwin-gcc-selección

Haga clic en Siguiente. El instalador verá qué otros paquetes deben instalarse para resolver cualquier dependencia. Haga clic en Siguiente para aceptar las recomendaciones.

Una vez que se hayan descargado e instalado todos los paquetes, siga los últimos pasos hasta que se cierre el instalador. Inicie la «Terminal Cygwin» para ingresar al entorno de desarrollo similar a Linux. En la terminal, no usa comandos de Windows como «dir», sino comandos de shell como «ls».

Para demostrar cómo compilar un programa Linux bajo Windows, usaremos el Paquete HTML-XML del W3. Para ver lo que puede hacer, consulte Cómo manipular archivos HTML y XML desde la línea de comandos.

Descargue los archivos fuente usando «wget»:

wget https://www.w3.org/Tools/HTML-XML-utils/html-xml-utils-6.7.tar.gz

Ahora descomprima el archivo comprimido:

tar -zxf html-xml-utils-6.7.tar.gz

Los archivos fuente ahora están en el directorio «html-xml-utils-6.7». Ingrese a ese directorio:

Antes de que se puedan compilar los archivos, debe ejecutar el script de shell «configure» para generar el Makefile (las instrucciones de compilación) que son adecuados para este entorno de compilación. Este es un paso común en Linux (y Cygwin) al crear paquetes desde el origen.

cygwin-configure-html-utils

Una vez que «configure» haya terminado, puede iniciar la compilación usando «make»:

La compilación fallará a la mitad. Yo estaba en dos mentes acerca de qué hacer a continuación. O podría cambiar a otro proyecto y construirlo desde su fuente o seguir luchando con HTML-XML-utils. Opté por lo último porque muestra que no todo será pan comido cuando intente compilar programas de Linux bajo Cygwin. La solución a este problema en particular es simple. El mensaje de error muestra que el enlazador no puede encontrar la biblioteca «iconv». Una mirada rápida al comando de enlace muestra que la biblioteca no está especificada. La solución rápida y sucia es ejecutar el comando manualmente y decirle al enlazador que use libconv. La forma «adecuada» de solucionar esto sería comenzar a profundizar en el Makefile, etc. para averiguar por qué no funciona.

Cygwin-build-falla

Ejecute el siguiente comando, teniendo en cuenta la inclusión de «-liconv» al final:

gcc -g -O2 -o hxindex.exe hxindex.o scan.o html.o openurl.o url.o heap.o class.o errexit.o connectsock.o types.o tree.o genid.o dtd.o headers.o dict.o fopencookie.o -liconv

Una vez que se compila el archivo «hxindex.exe», puede continuar con el resto de la compilación escribiendo «make» nuevamente. La forma en que funciona «make» es que verifica lo que se ha construido y lo que no, y luego continúa el proceso de construcción en el punto apropiado. Dado que hemos compilado manualmente «hxindex.exe», «make» simplemente continúa con el siguiente binario en su lista.

Cuando se complete «make», tendrá todos los archivos .exe en el directorio html-xml-utils-6.7.

Si te quedas atascado usando Cygwin, deberías mirar el Preguntas más frecuentesy en el documentación. En su defecto, el proyecto tiene un conjunto de listas de correo. Si tiene algún problema con los pasos descritos anteriormente, utilice la sección de comentarios a continuación.

Experto Geek - Tu Guía en Tendencias Tecnológicas