Para compilar GTK+, todo lo que necesitas es un compilador de C (gcc) y el Sistema de Ventanas X y librerías asociadas en tu sistema.
El sitio canónico esftp://ftp.gtk.org/pub/gtk.
Este sitio tiende a sobre-cargarse alrededor del lanzamiento de un nuevo GTK+, así que intenta utilizar alguno de los sitios espejo listados en ftp://ftp.gtk.org/etc/mirrors
Aquí hay algunos sitios espejos para que puedas iniciar:
Por lo general, todo lo que necesitas es ejecutar los comandos:
./configure
make
en el directorio gtk+-versión/.
Asegúrate que utilizas GNU make (usa make -v para verificar). Hay muchas versiones raras y maravillosas de make por ahí, y no todas ellas pueden manejar los Makefiles generados automáticamente.
Este problema se encuentra cuando las librerías GTK+ no pueden ser localizadas o son de una versión incorrecta. Generalmente, el compilador se queja de un 'unresolved symbol'. Hay dos cosas que necesitas verificar:
Asegúrate que las librerías se pueden encontrar. Quieres editar /etc/ld.so.conf para incluir los directorios que contienen las librerías GTK, de manera que luzca parecido a esto:
/usr/X11R6/lib
/usr/local/lib
Entonces debes correr /sbin/ldconfig como root. Puedes averiguar en que directorio se encuentra GTK utilizando
gtk-config --libs
Si tu sistema no utiliza ld.so para encontrar librerías (como Solaris), entonces deberás utilizar la variable de entorno LD_LIBRARY_PATH (o compilara la ruta en tu programa, lo cual no voy a cubrir aquí). Así que, con una línea de comandos tipo Bourne, puedes (si tus librerías GTK están en /usr/local/lib):
export LD_LIBRARY_PATH=/usr/local/lib
y en csh, puedes hacer esto:
setenv LD_LIBRARY_PATH /usr/local/lib
Asegúrate que el enlazador está localizando el conjunto correcto de librerías. Si tienes una distribución Linux que instala GTK+ (ejemplo RedHat 5.0), entonces esta versión vieja puede ser utilizada. Ahora (asumiendo que tienes un sistema RedHat), utiliza el comando
rpm -e gtk gtk-devel
También puedes querer eliminar los paquetes que dependen de gtk (rpm te dirá cuales son). Si no tienes un sistema RedHat Linux, asegúrate que ni /usr/lib ni /usr/local/lib contienen algunas de las librerías libgtk, libgdk, libglib, o libgck. En caso de que existan, elimínalas (y cualquier archivo include de gtk, como /usr/include/gtk y /usr/include/gdk) y reinstala gtk.
El archivo de encabezado "glibconfig.h" fue movido al directorio $exec_prefix/lib/glib/include/. $exec_prefix es el directorio que era especificado al dar la bandera --exec-prefix a ./configure cuando se compiló GTK+. Su valor por omisión es $prefix, (especificado con --prefix), cuyo valor por omisión es /usr/local.
Esto fue hecho porque "glibconfig.h" incluye información dependiente de la arquitectura, y el resto de los archivos include son colocados en $prefix/include, que puede ser compartido entre distintas arquitecturas.
GTK+ incluye un archivo de comandos, /gtk-config/, que hace fácil el encontrar los caminos correctos de inclusión. El Tutorial GTK+ incluye un ejemplo de como utilizar /gtk-config/ para compilaciones simples desde la línea de comandos. Para información sobre configuraciones más complicadas, vea el archivo docs/gtk-config.txt en la distribución GTK+.
Si está intentando compilar un programa viejo, puede resolver el problema configurándolo con una línea de comando como:
setenv CPPFLAGS "-I/usr/local/include/glib/include"
./configure
(Sustituya el valor apropiado de $exec_prefix para /usr/local.)
Hay varias razones comunes para esto:
Tienes una versión vieja de GTK instalada en algún lugar. RedHat 5.0, por ejemplo, instala una copia vieja de GTK que no va a funcionar con las aplicaciones nuevas. Debes remover esta copia vieja, pero ten en cuenta que esto hará fallar las aplicaciones del control-panel.
gtk-config (o algún otro componente de GTK) no está en la ruta de búsqueda, o hay una versión vieja en el sistema. Teclea:
gtk-config --version
para revisar ambos casos. Si regresa un valor diferente de lo que esperas, entonces tienes una versión vieja de GTK en tu sistema.
El archivo de comandos ./configure no puede encontrar las librerías GTK. Ver la pregunta de arriba para obtener ayuda en esto.
Si ninguna de las anteriores te sirve de ayuda, entonces revisa en config.log, el cual es generado por ./configure a medida que corre. Al final encontrarás la última acción que tomó antes de fallar. Si es una sección de código fuente, copia el código fuente a un archivo y compilalo con la línea justo encima de él en config.log. Si la compilación es exitosa, intenta ejecutarlo.