¿De este modo?
./configure
make
sudo make install
Dime que se siente que no te salga
Pero eso no es cierto, primero tienes que instalar las dependencias que generalmente se encuentran en el archivo README, así que es una fórmula de cuatro pasos.
Muchas personas no te lo han dicho, pero ./configure te dirá si puedes continuar o no, si ./configure se queja, no puedes continuar con la compilación, a veces puede ayudarte deshabilitar la compatibilidad con algunas características del programa, o sea, puedes deshabilitar el soporte para algunas funciones leyendo parámetros disponibles con ./configure --help, luego puedes ejecutar ./configure --disable-ssl por ejemplo.
Entonces ya estás listo, instalaste las dependencias, pero supón que tuviste errores en ./configure.
Esta vez ./configure se queja de que falta una biblioteca o paquete, pero eso no es cierto, ya que está bastante seguro de que lo instalaste. He tenido este error muchas veces cuando trato de compilar en Slackware debido a que mi shell de root no está cargando las variables de entorno. Para resolver esto tienes que crear un archivo: /root/.bashrc y agregar:
source /etc/profile
Luego ejecuta la misma línea que agregaste:
source /etc/profile
Tal vez las variables de entorno sí están cargadas y el problema persiste, así que vamos a verificar la variable de entorno más importante relacionada con la compilación, PKG_CONFIG_PATH:
echo $ PKG_CONFIG_PATH
Tiene que imprimir una lista de rutas separadas por dos puntos como este:
/usr/local/lib64/pkgconfig:/usr/local/share/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig
Debes saber que pkgconfig es una carpeta que contiene la información de vinculación (linking) de librerías en muchos archivos, así también pkg-config es una herramienta de la línea de comandos, así que en lugar de señalar la ubicación de los headers de las librerías como en la siguiente línea de código:
gcc -o test test.c -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -lglib-2.0
Solo especificamos el nombre de la librería (glib-2.0) con el código pkg-config :
gcc -o test test.c $(pkg-config --libs --cflags glib-2.0)
Por supuesto, se hace automáticamente con la fórmula de ./configure, make y make install.
Ten en cuenta el comando entre paréntesis:
pkg-config --libs --cflags glib-2.0
Devolverá algo como esto:
-I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -lglib-2.0
Puedes probarlo tú mismo
Esto es posible porque pkg-config lee el archivo /usr/lib64/pkgconfig/glib-2.0.pc que contiene esa información, observa que tiene una extensión .pc; Entonces, dime, ¿cómo sabe pkg-config sobre este archivo? Gracias a la variable de entorno PKG_CONFIG_PATH antes mencionada, comprueba si la variable PKG_CONFIG_PATH incluye /usr/lib64/pkgconfig, claro que sí lo contiene. Pues bien, el nombre del archivo es el mismo que la biblioteca más la extensión .pc.
Este es el contenido de ese archivo:
prefix=/usr
exec_prefix=${prefix}
libdir=/usr/lib64
includedir=${prefix}/include
glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums
Name: GLib
Description: C Utility Library
Version: 2.46.2
Requires.private:
Libs: -L${libdir} -lglib-2.0
Libs.private: -pthread
Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include
Observa que las líneas que comienzan con Libs y Cflags, libs y cflags fueron los parámetros que pasamos a pkg-config en el comando de arriba:
pkg-config --libs --cflags glib-2.0
Eso devolvió lo siguiente, así que ten en cuenta cómo se genera el siguiente resultado, algunas variables se declaran en el archivo glib-2.0.pc y luego se cargan dentro de otra como en la línea Cflags donde se declaró previamente la variable $ {includedir}.
-I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -lglib-2.0
La parte importante es que el comando ./configure creará un archivo llamado «Makefile», allí en Makefile encontrarás las libs y cflags obtenidas de pkg-config, también existe la posibilidad que el script ./configure no funcione correctamente, por lo que tendrás que editar manualmente el Makefile.
Por ejemplo, ayer tuve este error: cuando ejecuté el comando make, no pudo encontrar mi biblioteca glib , se quejaba de que glib.h no se había encontrado y todo lo relacionado con glib … Así que modifiqué mi Makefile y lo agregué a una variable «EXTRA_CFLAGS», el Makefile contiene muchas variables, y allí puede agregar un directorio faltante en una variable CFLAG, por ejemplo, en la línea que comenzó como:
-pthread
-I/usr/include/pidgin -I/usr/include/gtk-2.0
-I/usr/lib64/gtk-2.0/include -I/usr/include/pango-1.0
-I/usr/include/atk-1.0 -I/usr/include/cairo
I added in any position:
-I/usr/include/glib-2.0
Y funcionó.
Recuerda que debes incluir tanto los encabezados (Cflags) como libs, en este caso glib es una biblioteca fundamental que no tenía motivos para fallar. Por favor, no te metas con la variable principal de CFLAG.
Ahora recuerda que el script ./configure a veces también nos ayudará con las librerías que no localice, para ello debes ejecutar:
./configure --help, y allí te indicará qué variables puedes usar para indicar manualmente la ubicación de los headers y las librerías.
Por ejemplo, ayer ./configure me dijo que me faltaba un paquete PURPLE, ejecuté ./configure -help y me dijo que puedo usar la variable PURPLE_CFLAGS y PURPLE_LIBS para indicar manualmente la ubicación de PURPLE.
Lo resolví ejecutando:
export PURPLE_CFLAGS='-I/usr/local/lib/include/libpurple'
export PURPLE_LIBS=/usr/local/include/libpurple/
Y, por supuesto, de nuevo
./configure
La compilación puede fallar en la fase de make y es principalmente el caso de los paquetes desatendidos, que son aquellos que no han recibido ninguna actualización en 2 años. De lo contrario, es un bug.