Sin categoría

Sobrevivir a la naturaleza de Windows

Cuando empecé a desarrollar software, mi intención siempre fue escribir software para Windows. Recuerdo que compré Borland C++ en la librería de la universidad y empecé a intentar familiarizarme con la API de Windows. Entonces, por supuesto, un amigo me habló de un nuevo sistema operativo llamado Linux. El fin de semana siguiente, me pasé horas descargando Linux, unos 26 disquetes, en mi Packard Bell. En resumen, llevo 17 años inmerso en el mundo Linux.

Más recientemente, en NorthScale, hemos querido añadir soporte para memcached - particularmente el NorthScale Memcached Server - en Windows. Así que me he familiarizado no sólo con Windows, sino también con el compilador Mingw y el entorno Msys *NIX-like.

Windows ha cambiado mucho desde la última vez que lo usé. Recuerdo los días en los que había que ser un experto en la edición de archivos de configuración como windows.ini, config.sys, autoexec.bat, sobre todo para ajustar la gestión de la memoria. Como usuario de UNIX, debo decir que Windows ha avanzado mucho. Especialmente las versiones más recientes de Windows. Es interesante volver a algo que no has usado en mucho tiempo, un poco como salir de una máquina del tiempo.

Para construir memcached, utilizamos el compilador cruzado Mingw. ¿Qué es Mingw? Mingw es una contracción de "Minimalist GNU for Windows", la suite de compiladores GNU que incluye prácticamente todo lo necesario para compilar ejecutables Windows. No sólo eso, es posible compilar binarios Windows en Linux u otros *NIXs con Mingw usando mingw. Como tenemos algunas piezas que son sólo para Windows, realizamos nuestras compilaciones en Windows.

Uno podría preguntarse, ¿por qué no utilizar compiladores de Microsoft? Esto se debe a que el requisito y el objetivo del proyecto fuente memcached para adherirse a C99. Este es un punto en el que he notado que hay algunos sentimientos fuertes. Algunas personas afirman que C99 no es importante. Bueno, para memcached, lo es, así que uso lo que funcione para nuestras necesidades. El otro requisito o meta que tratamos de alcanzar es tener el menor número de cambios en la fuente de memcached para facilitar el soporte para Windows. A menudo, y lo he visto en otros proyectos, el código fuente está plagado de complejidades ifdef previas al compilador. Esto es lo que queremos evitar.

La otra pieza de este pastel es Msys. Msys es una contracción de "Sistema Mínimo", siendo éste el conjunto mínimo de herramientas para permitirte tener un entorno de línea de comandos *NIX. Dado que utilizamos Git como nuestra herramienta de gestión de código fuente, el proyecto Msysgit no sólo tiene un Msys más actualizado, sino también git empaquetado. Además, para Windows de 32 bits, Msysgit ya tiene Mingw incluido.

Configuración de Mingw y Msys

Para configurar Mingw y Msys, depende de si usas Windows 64-bit o 32-bit. Para 32 bits, puedes instalar Msysgit y tendrás todo lo que necesitas. Para Windows de 64 bits, instale Msysgit y luego instale el puerto de 64 bits de Mingw, Mingw-w64.

Instalación de Msysgit

Msysgit se puede encontrar en http://code.google.com/p/msysgit/. Para nuestras necesidades, seleccionamos el instalador ejecutable "fullinstall". Una vez descargado, basta con ejecutar el ejecutable descargado. El instalador compilará Msys en c:msysgitmsysgit. Una vez instalado, desde bash, esta estructura de directorios será /c/msysgit/msysgit, que la ruta es la misma que /. Usted notará que al instalar Msysgit que Git se compila al mismo tiempo, entonces finalmente se le presenta una ventana de terminal de shell bash. Lo primero que recomiendo hacer es ejecutar el script tcl (desde la ventana terminal bash) para añadir accesos directos a tu escritorio y/o menú:

/share/msysGit/add-shortcut.tcl

Esto mostrará las opciones disponibles para este útil script.

Instalación de Mingw-w64

Para Windows de 64 bits, deberá instalar mingw-w64. Puede encontrar el archivo comprimido para Mingw-w64 en http://sourceforge.net/mingw-w64 mingw-w64-1.0-bin_i686-mingw_YYYMMDD.zip. Extraiga este archivo en C: (/c/).

Añadir rutas a su sistema

Usted tendrá que añadir la variable de entorno PATH para incluir tanto la ruta de acceso a los binarios mingw y msysgit Y bibliotecas. En Windows, las variables de entorno utilizan %NAME%, por ejemplo: %PATH%. Además, el carácter de separación de rutas en Windows es un punto y coma en lugar de dos puntos. Para editar su PATH, haga lo siguiente:

Panel de control ->
Sistema ->
Avanzado ->
Variables de entorno ->
Ruta (haga clic para editar)

Añada lo siguiente al PATH existente:

c:mingwbin;c:msysgitmsysgitbin;c:msysgitmsysgitlocalbin;c:msysgitmsysgitmingwbin;

Otra cosa que hay que saber en Windows es que la ruta de carga de la biblioteca es simplemente %PATH% ($PATH).

Compilar código con Mingw

En este punto, deberías tener un sistema funcional, suficiente para que puedas compilar código y producir ejecutables de Windows. Además, ¡tendrás la capacidad de trabajar en tu sistema Windows usando las herramientas *NIX que conoces y amas!

Para compilar código en win32, basta con ejecutar las compilaciones como se hace en Linux. Tomemos por ejemplo la librería de red, Libevent. Para compilar en win32 (Msysgit) simplemente:

./configurar
escriba a
hacer instalación

Sin embargo, para win64, debido a que tiene instalado mingw-w64, necesita especificar algunas banderas al ejecutar configure:

./configure -host=x86_64-w64-mingw32 -build=i686-pc-mingw32 -prefix=/usr

escriba a

Estas banderas se encargan de asegurar que obtengas librerías y ejecutables de 64 bits. Una vez que ejecutes make, compilarás líneas como:

/bin/sh ./libtool -tag=CC -mode=compile x86_64-w64-mingw32-gcc -DHAVE_CONFIG_H -I. -I./compat -I
./include -IWIN32-Code -g -O2 -Wall -fno-strict-aliasing -MT select.lo -MD -MP -MF .deps/select.T
po -c -o select.lo select.c

Si mira en el directorio de ejecutables de Mingw-w64, /c/mingw/bin, verá por qué es necesario especificar las banderas: todos los binarios llevan el prefijo "compile x86_64-w64-mingw32". Especificando las opciones -host y -build, se utilizan los ejecutables correctos del compilador, asegurando la arquitectura adecuada.

Para algunos otros programas que no tienen la conveniencia de la secuencia de comandos de configuración, puede utilizar el CROSS suministrado a hacer:

CROSS=x86_64-w64-mingw32-

Esto se encargará de garantizar el uso de los binarios de compilador y enlazador adecuados.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Patrick Galbraith

Patrick Galbraith es Ingeniero de Software en Couchbase. Su trabajo consiste en I+D, creación de prototipos y desarrollo de sistemas de creación de productos Linux y Windows.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.