Linux-Mandrake: Manual de Referencia | ||
---|---|---|
Anterior | Capítulo 15. Compilando e instalando software libre | Siguiente |
Un interés puramente técnico del hecho de disponer de los fuentes es la posibilidad de portar el software. Un software libre desarrollado para un sistema Unix se puede usar en todos los sistemas Unix existentes (sean libres o propietarios), con pocas modificaciones. Esto implica una configuración del software justo antes de la compilación.
Existen muchos sistemas de configuración, Ud. tiene que usar el que el autor del software quiera (a veces, se necesitan varios). Por lo general, Ud. puede:
usar Autoconf (ver la sección Autoconf) si existe un archivo denominado configure en el directorio padre de la distribución.
usar Imake (ver la sección Imake) si existe un archivo denominado Imakefile en el directorio padre de la distribución.
ejecutar un script del shell, (por ejemplo, install.sh) según lo que diga el archivo INSTALL (o el archivo README).
Autoconf permite configurar el software correctamente. Crea los archivos necesarios para la compilación (por ejemplo, el archivo Makefile), y, a veces, cambia los fuentes directamente (como, por ejemplo, al usar un archivo config.h.in).
El principio de Autoconf es simple:
el programador del software sabe qué pruebas son necesarias para configurar su software (ej.: "¿qué versión de esta o aquella biblioteca usa"?). Él las escribe, siguiendo una sintaxis precisa, en un archivo denominado configure.in.
Él ejecuta Autoconf, el cual genera un script de configuración denominado configure a partir del archivo denominado configure.in. Este script efectuará las pruebas necesarias cuando se configure el programa.
El usuario final ejecuta el script, y Autoconf se encarga de configurar todo lo que es necesario para la compilación.
Un ejemplo del uso de Autoconf:
$ ./configure loading cache ./config.cache checking for gcc... gcc checking whether the C compiler (gcc ) works... yes checking whether the C compiler (gcc ) is a cross-compiler... no checking whether we are using GNU C... yes checking whether gcc accepts -g... yes checking for main in -lX11... yes checking for main in -lXpm... yes checking for main in -lguile... yes checking for main in -lm... yes checking for main in -lncurses... yes checking how to run the C preprocessor... gcc -E checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include checking for ANSI C header files... yes checking for unistd.h... yes checking for working const... yes updating cache ./config.cache creating ./config.status creating lib/Makefile creating src/Makefile creating Makefile |
Para tener un mayor control de lo que genera configure, se le pueden pasar algunas opciones por medio de la línea de comandos o variables de entorno. Por ejemplo:
$ ./configure --with-gcc --prefix=/opt/GNU |
o (con Bash):
$ export CC=`which gcc` $ export CFLAGS=-O2 $ ./configure --with-gcc |
o:
$ CC=gcc CFLAGS=-O2 ./configure |
Un error típico del script configure es aquel del tipo configure: error: Cannot find library guile (configure: error: no se encuentra la biblioteca guile) (La mayoría de los errores del script configure lucen así).
Esto significa que el script configure no pudo encontrar una biblioteca (guile en nuestro ejemplo). El principio es que el script configure compila un pequeño programa de prueba que usa esta biblioteca. Si esta compilación no tiene éxito, no podrá compilar el software. Entonces ocurre un error.
Busque la razón del error examinando al final del archivo config.log, que contiene una traza de todos los pasos de configuración. El compilador de lenguaje C es suficientemente claro con sus mensajes de error. Eso lo ayudará a resolver el problema.
Verifique que la biblioteca en cuestión esté instalada correctamente. Si no es así, puede correr /sbin/ldconfig, borrar el archivo config.cache y volver a ejecutar el script configure. Si todavía sigue con problemas, intente volver a instalar la biblioteca (desde los fuentes o desde un archivo binario). Una forma eficiente de verificar la instalación es buscar el archivo que contiene los símbolos de la biblioteca, que siempre se denomina lib<nombre>.so. Por ejemplo,
$ find / -name 'libguile*' |
o, si no:
$ locate libguile |
Verifique que el compilador puede acceder a ella. Esto significa que se encuentra en algún directorio entre: /usr/lib, /lib, /usr/X11R6/lib (o entre aquellos especificados por la variable de entorno LD_LIBRARY_PATH, explicada ¿Qué pasa si... no funciona? número 5.b.). Verifique que este archivo es una biblioteca ingresando file libguile.so.
Verifique que los archivos de encabezado correspondientes a la biblioteca se encuentran en el lugar adecuado (generalmente, /usr/include o /usr/local/include o /usr/X11R6/include). Si Ud. no sabe cuales son los archivos de encabezado necesarios, verifique que instaló la versión de desarrollo de la biblioteca en cuestión (por ejemplo, gtk+-devel además de libgtk). La versión de desarrollo de la biblioteca proporciona los archivos include (incluir) necesarios para compilar un software usando esta biblioteca.
Verifique que Ud. tiene espacio suficiente en el disco (el script configure necesita de algo de espacio para archivos temporales). Use el comando df -k para visualizar el espacio disponible en las particiones de su sistema, y ocúpese de las particiones llenas o casi llenas.
Si Ud. no comprende los mensajes de error almacenados en el archivo config.log, no dude en pedir ayuda a la comunidad de software libre (ver la sección Soporte técnico).
Es más, verifique si configure responde 100% de No o si responde No y Ud. está seguro que la biblioteca existe (por ejemplo, sería muy extraño que no exista la biblioteca curses en su sistema). Si ese es el caso, ¡probablemente esté mal configurada la variable LD_LIBRARY_PATH!
Imake le permite configurar un software libre creando un archivo Makefile a partir de reglas simples. Estas reglas determinan los archivos necesarios para compilar el archivo binario, y luego Imake genera el archivo Imakefile correspondiente. Estas reglas se especifican en un archivo denominado Imakefile.
Lo que tiene interesante Imake es que usa información dependiente de la arquitectura y del sitio. Esto es muy útil para los programas que usan X Window System. Pero Imake se usa para muchas otras aplicaciones.
La forma más fácil de usar Imake, es entrar en el directorio principal del archivado descomprimido, y luego correr el script xmkmf, que llama al programa imake:
$ xmkmf -a imake -DUseInstalled -I/usr/X11R6/lib/X11/config make Makefiles |
Si el sitio no está instalado correctamente, ¡debe recompilar e instalar X11R6!
Para más información lea los archivos INSTALL o README. Por lo general, Ud. tiene que ejecutar un archivo del tipo install.sh o configure.sh. Entonces, o el script de instalación será silencioso (y determinará lo que necesita por sí solo), o le preguntará información sobre su sistema (por ejemplo, las rutas).
Si Ud. no llega a determinar el archivo que tiene que ejecutar, puede ingresar ./ (bajo Bash), y luego presionar dos veces la tecla TAB (tecla de tabulado). Bash completará automáticamente el nombre de un archivo ejecutable en el directorio corriente (por lo tanto, un posible script de configuración). En caso de que varios archivos se puedan ejecutar, le dará una lista. Solo debe elegir el archivo correcto.
Un caso particular es la instalación de módulos Perl (aunque no solamente de estos). La instalación de tales módulos se hace mediante la ejecución de un script de configuración, el cual se encuentra él mismo, escrito en Perl. Por lo general, el comando a ejecutar es:
$ perl Makefile.PL |
Algunas distribuciones de software libre están mal organizadas, especialmente durante las primeras etapas de desarrollo (¡pero se previene al usuario!). Ellas necesitan retocar "a mano" algunos archivos de configuración. Por lo general, estos archivos son un archivo Makefile (ver la sección make) y un archivo config.h (este nombre solo es convencional). Como siempre, ¡lea los archivos README y INSTALL!
No recomendamos que estas manipulaciones sean hechas por usuarios que no sepan lo que están haciendo. Esto necesita de conocimientos reales y la motivación necesaria para tener éxito. Pero la práctica lleva a la perfección.