descargar catálogo completo en formato PDF catálogo pdf

 

Configuración de librería GTK+ en Windows 7

Luego de 2 días enteros de estar instalando software, paquetes, compilando, probando, tratando de ver por qué la compilación tiraba errores, etc, etc, por fin logré que GTK+ funcione sobre Windows 7, compilando en CodeBlocks.

No sé si lo costoso habrá sido por mala suerte, o si realmente tiene sus complicaciones, o si es por la mala documentación, o por las varias distintas versiones de cada cosa que existen dando vueltas por la web, y vaya uno a saber si todos los instructivos sirven para todas ellas, o no... Debe haber un poco de cada cosa... Por otro lado, he leído también a varias personas que le ha costado la instalación y configuración.

Todo comienza con la necesidad de realizar una interfaz visual para correr sobre un Raspberry Pi.

Planteé lo siguientes requisitos:

• Poder realizar el programa en mi PC de escritorio sobre Windows, y luego llevar el código al Raspberry (corriendo Raspbian) y compilar el programa allí sin hacer mayores cambios (idealmente ningún cambio).

• Programar en C/C++

GUI posibles y motivos por los cuales fueron descartadas

La elección es una cuestión muy subjetiva, pero mi búsqueda fue:

• Kivy: parece ser una de las más atractivas. Estuve a punto de dejar de lado mi deseo de solo utilizar C/C++ y ceder ante el agregado de Pyhton (solo por esta librería). Parece ser que corre sobre cualquier plataforma, sin complicaciones, sin dependencias, en fin, suena bien. Sin embargo, actualmente descartado.

• WxWidgets: si mal no recuerdo, la descarté porque no podía usarla en Android (previendo por si mas adelante necesito hacer una app que corra sobre dicho OS)

• Qt5: es libre, pero con licencia de determinado tipo, y te dice que la versión libre es completa (igual que la versión licenciada) pero bla bla bla, y luego de leer, leer y leer y no encontrar información clara, directamente fue descartada.

• GTK+: es un "framework" (algo así como un conjunto de librarías) para crear GUIs. Cross-platform, C/C++... en fin, no encontré ningún inconveniente, por lo que finalmente decidí por esta opción.

Selección de IDE

La compilación, uso de librerías, escritura del código, es más cómoda utilizando una interfaz IDE (al menos para mí, ya que hay gente que le gusta usar un simple editor de texto y compilar directo desde línea de comandos). A continuación los que probé:

• Eclipse: es el primero que instalé y probé. Lo usé durante estos días y me dejó una mala sensación, quizá sea bueno y yo no tuve suerte de verlo andar correctamente. Creo que es un poquito más difícil de configurar que CodeBlocks, aunque calculo que son lo mismo. Tiene bastantes pluguins que se le pueden instalar haciendo más complicada la decisión o comprensión de qué cosas requiere uno para hacer funcionar lo que necesita. Finalmente decidí a favor de otro software: CodeBlocks.

• Geany: Cuando Eclipse me tiraba errores de compilación por no poder configurar las librerías correctamente, probé de instalar este soft, el cual me tiraba los mismos errores. De aquí, llego a la conclusión de que el problema que tenía tampoco era culpa del software Eclipse IDE.

• CodeBlocks: lo probé como una nueva alternativa para ver si podía configurar la librería GTK correctamente. Finalmente pude hacerlo usando este IDE. No creo que haya sido tampoco gracias a lo virtuoso de este software, sino mas bien a haber realizado una instalación desde cero de todos los paquetes que había instalado previamente, al mismo tiempo de haber estado ya a esa altura 2 días enteros instalando, configurando cosas, y que estaba más en conocimiento de los "pasos necesarios" que para ese entonces había realizado como 10 veces. Sin embargo, debo decir que me gusta más el aspecto que tiene, además, creo que las opciones se encuentran un poco mejor organizadas.

Configuración paso a paso

No voy a enumerar todos los errores con los que me topé porque sería confuso. Me concentraré en dar el paso a paso que resultó correcto para lograr configurar e instalar los paquetes en mi computadora.

1: Archivos necesarios y sus instalaciones

• MinGW: Compilador GNU para Windows. Archivo "mingw-w64-install.exe". Instalar en C:\MinGW

• MSYS: Más utilidades que suplementan a MinGW. Archivo "MSYS-1.0.11.exe". Instalar en C:\msys

• Librería GTK+: Archivo "gtk+-bundle_2.24.10-20120208_win32.zip". Yo la descomprimí en C:\FGRLIB\GTK ("FGR" son mis iniciales... Si ustéd se llama Fulano Mengano Perengano, podría usar la carpeta C:\FMPLIB\GTK )

• CodeBlocks: El entorno IDE. Archivo "codeblocks-17.12-setup.exe". Puede dejar el directorio de instalación "por defecto".

Resumen: instalar en los directorios indicados MinGW y MSYS. Descomprimir la librería GTK+ también en la carpeta sugerida.

2: Configurar Environment Variables

En el Panel de Control, busque la opción de editar las "Environment Variables" (yo uso el Windows en inglés, por eso fijarse cómo sería en el Windows acorde al idioma en que usted lo tenga).

• Agregar a variable "Path" lo siguiente (separar con ";") C:\MinGW\mingw32\bin;C:\msys\1.0\bin;C:\FGRLIB\GTK\bin

• Agregar una variable nueva: "PKG_CONFIG_PATH" = C:\FGRLIB\GTK\lib\pkgconfig

3: Importante verificación a realizar

En este punto es importante hacer la siguiente prueba, que nos va a indicar si todo está correcto hasta este punto.

Abrir una ventana de Command Prompt (cmd) y ejecutar el comando "gcc". El resultado correcto debería ser "gcc: fatal error: no input files". Eso nos indica que Windows está "viendo" al compilador. Por supuesto, es un error pero un error "correcto" ya que no estamos invocando al compilador gcc de manera correcta.

Si por otro lado, el resultado de la ejecución del comando gcc es "gcc is not recognized as an internal or external command, operable program or batch file" entonces hay algo mal configurado. Quizá solamente necesiten reiniciar la computadora, así que mi sugerencia es reiniciar y volver a intentar el comando gcc en el Command Prompt.

4: Configuraciones necesarias en CodeBlocks

Abrir el programa CodeBlocks e ir a Settings → Compiler

• Verificar solapa de "Toolchain executables". Habíamos instalado a MinGW en la ruta "C:\MinGW", allí adentro deberíamos encontrar una carpeta "mingw32" por lo que la ruta completa que debemos colocar en el espacio "Compiler's installation directory" es "C:\MinGW\mingw32" (si desea, también puede verificar que aquí dentro debe haber una carpeta llamada "bin").

Verifique que en la carpeta "bin" recién nombrada existan los archivos:

"C compiler" = gcc.exe

"C++ compiler" = g++.exe

"Linker for dynamic libs" = g++.exe

"Linker for static libs" = ar.exe

"Resource compiler" = windres.exe

"Make program" = mingw32-make.exe

Nota: en la carpeta "bin" también hay archivos con el prefijo "i686-w64-mingw32-" (por ejemplo "i686-w64-mingw32-gcc.exe"). Estos otros archivos creo que también funcionarían correctamente. Yo decidí utilizar los que se ven en la siguiente captura de pantalla.

• Configurar solapa "Search directories" (compiler).

Los directorios a agregar en esta pantalla (los que puede ver en la imagen de aquí arriba) surgen de la siguiente manera: ejecute el Command Prompt y escriba el siguiente comando: pkg-config --cflags gtk+-2.0

Pasando el limpio el resultado, quedan los siguientes directorios, que obviamente son los mismos que agregué al CodeBlocks (nótese que los directorios están precedidos por "-I"):

C:/FGRLIB/GTK/include/gtk-2.0

C:/FGRLIB/GTK/lib/gtk-2.0/include

C:/FGRLIB/GTK/include/atk-1.0

C:/FGRLIB/GTK/include/cairo

C:/FGRLIB/GTK/include/gdk-pixbuf-2.0

C:/FGRLIB/GTK/include/pango-1.0

C:/FGRLIB/GTK/include/glib-2.0

C:/FGRLIB/GTK/lib/glib-2.0/include

C:/FGRLIB/GTK/include

C:/FGRLIB/GTK/include/freetype2

C:/FGRLIB/GTK/include/libpng14

• Configurar solapa "Search directories" (linker).

El directorio a agregar en esta pantalla (el que puede ver en la imagen de aquí arriba) surge de la siguiente manera: ejecute el Command Prompt y escriba el siguiente comando: pkg-config --libs gtk+-2.0

Lo primero que devuelve el comando es la ubicación de las librerías en el disco. Esta ubicación es la que se debe indicar en el CodeBlocks:

C:/FGRLIB/GTK/lib

La parte restante de la respuesta es el listado de las librerías que en el siguiente paso debe agregar. Paso en limpio las librerías que a mi me indica (nótese que las librerías están precedidas por "-l"):

gtk-win32-2.0

gdk-win32-2.0

atk-1.0

gio-2.0

pangowin32-1.0

gdi32 → (No encuentro el archivo, por lo que decidí no ponerlo en el CodeBlocks por las dudas)

pangocairo-1.0

gdk_pixbuf-2.0

pango-1.0

cairo

gobject-2.0

gmodule-2.0

gthread-2.0

glib-2.0

intl

• Configurar solapa "Linker settings" (agregar las librerías que arriba menciono, las resultantes del comando "pkg-config --libs gtk+-2.0")

Programa de prueba

Bueno, ya está todo configurado, deberíamos poder compilar un programa que utilice la librería GTK+.

• Crear un nuevo proyecto:

• Agregar un nuevo archivo:

• Lo nombramos "main.c":

• El archivo por supuesto va a estar vacío, pero copiemos el siguiente código fuente "ejemplo" y compilamos:

#include <gtk/gtk.h>

void hello(void)
{
g_print("Hello World\n");
}

void destroy(void)
{
gtk_main_quit ();
}

int main(int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *button;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (destroy), NULL);
gtk_container_border_width (GTK_CONTAINER (window), 10);

button = gtk_button_new_with_label("Hello World");

gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (hello), NULL);
gtk_signal_connect_object (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (window));
gtk_container_add (GTK_CONTAINER (window), button);
gtk_widget_show (button);

gtk_widget_show (window);

gtk_main ();

return 0;
}

Debería verse la compilación exitosa como la siguiente pantalla:

• Luego, podemos ejecutar el programa generado, y vamos a ver:

Solución de un posible error al ejecutar el programa generado

Habiendo ya ejecutado al menos 1 vez de manera correcta el archivo ".exe" generado, me pasó que en algún momento volví a probar de ejecutar el mismo archivo ".exe" y aparece la siguiente pantalla de error:

Algo sospechoso es que de un momento a otro, de repente tira error (y digo sospechoso porque no es que nunca había logrado correrlo al programa compilado). Si ocurre esto, una de las posibles causas es que aparentemente los paths de las librerías "se le olvidaron" a Windows (no se por qué, pero me ha pasado). Si quiere, puede verificar que abriendo el Command Prompt y haciendo lo mismo que en este documento se indica bajo el título "3: Importante verificación a realizar" (mas arriba), verá que el resultado es "gcc is not recognized as an internal or external command, operable program or batch file".

Dado que en teoría las variables ya configuradas de Windows están todas correctas, probé de reiniciar la computadora. Luego del reinicio, el problema se solucionó, y el programa corre normalmente, y si entra al Command Prompt verá que ejecutar gcc es reconocido correctamente. Moraleja: si pasa algo raro, verificar en el Command Prompt es una de las primeras cosas que nos va a dar una idea de qué puede andar ocurriendo.

Referencias/Fuentes

Powered by Abebashop
(c) All rights reserved