Sophie

Sophie

distrib > Mandriva > 10.0 > i586 > by-pkgid > 48e6004f7274ccc2095a5ab8f2460dd2 > files > 81

mandrake-doc-es-10.0-5.1.100mdk.noarch.rpm

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Compilación</title><meta name="generator" content="DocBook XSL Stylesheets V1.64.0"><link rel="home" href="index.html" title="Guía de Referencia"><link rel="up" href="install-free-software-chapter.html" title="Capítulo 12. Compilando e instalando
  software libre"><link rel="previous" href="install-free-config.html" title="Configuración"><link rel="next" href="install-free-installation.html" title="Instalación"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Compilación</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="install-free-config.html">Anterior</a> </td><th width="60%" align="center">Capítulo 12. Compilando e instalando
  software libre</th><td width="20%" align="right"> <a accesskey="n" href="install-free-installation.html">Siguiente</a></td></tr></table><hr></div><div class="sect1" lang="es"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="install-free-compilation"></a>Compilación</h2></div></div><div></div></div><p><a name="BId-install-free-software-chapter-pa96"></a>Ahora que el software
   está configurado correctamente, sólo falta compilarlo. Generalmente
   esta parte es fácil, y no presenta problemas serios.</p><div class="sect2" lang="es"><div class="titlepage"><div><div><h3 class="title"><a name="make"></a>Make</h3></div></div><div></div></div><p><a name="BId-install-free-software-chapter-pa97"></a><a class="indexterm" name="BId-install-free-software-chapter-it5"></a><span><b class="command">make</b></span> es la
     herramienta favorita de la comunidad de software libre para
     compilar los fuentes. Tiene dos cosas interesantes:</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-install-free-software-chapter-pa98"></a>le permite ganar
      tiempo al desarrollador, porque le permite administrar la
      compilación de su proyecto de manera eficiente,</p></li><li><p><a name="BId-install-free-software-chapter-pa99"></a>permite que el
      usuario final compile e instale el software en pocas líneas de
      comando, incluso si no tiene conocimientos preliminares de
      desarrollo.</p></li></ul></div><p><a name="BId-install-free-software-chapter-pa100"></a>Las acciones a
    ejecutar para obtener una versión compilada de los fuentes
    generalmente se almacenan en un fichero denominado
    <tt class="filename">Makefile</tt> o <tt class="filename">GNUMakefile</tt>.
    De hecho, cuando se invoca a <span><b class="command">make</b></span>, este lee
    dicho fichero, si existe, en el directorio corriente. Si no es
    así, se puede especificar el fichero usando la opción
    <tt class="option">-f</tt> con <span><b class="command">make</b></span>.</p></div><div class="sect2" lang="es"><div class="titlepage"><div><div><h3 class="title"><a name="id2562578"></a>Reglas</h3></div></div><div></div></div><p><a name="BId-install-free-software-chapter-pa101"></a><span><b class="command">make</b></span> funciona de acuerdo a un sistema de
    <a name="BId-install-free-software-chapter-gt12" href="glossary.html#term-dependencies"><i class="glossterm">dependencias</i></a>,
    razón por la cual la compilación de un fichero binario
    (“<span class="quote"><a name="BId-install-free-software-chapter-gt13" href="glossary.html#term-target"><i class="glossterm">objetivo</i></a></span>”)
    necesita pasar por varias etapas (“<span class="quote">dependencias</span>”). Por
    ejemplo, para crear el fichero binario (imaginario)
    <tt class="filename">glloq</tt>, se deben compilar y luego vincular los
    ficheros objeto <tt class="filename">main.o</tt> e
    <tt class="filename">init.o</tt> (ficheros intermedios de la
    compilación). Estos ficheros objeto también son objetivos, cuyas
    dependencias son sus ficheros fuente correspondiente.</p><p><a name="BId-install-free-software-chapter-pa102"></a>Este texto sólo es una introducción mínima para
    sobrevivir en el mundo sin piedad de <span><b class="command">make</b></span>.
    Para una documentación exhaustiva, debe referirse a <i class="citetitle"><a name="BId-install-free-software-chapter-ct1"></a>Managing Projects with
    Make</i> (Administración de proyectos con Make), segunda
    edición, de <span class="emphasis"><em>O'Reilly</em></span>, por <i class="wordasword">Andrew</i>
    <i class="wordasword">Oram</i> y <i class="wordasword">Steve</i>
    <i class="wordasword">Talbott</i>.</p></div><div class="sect2" lang="es"><div class="titlepage"><div><div><h3 class="title"><a name="id2562723"></a>Go, go, go!</h3></div></div><div></div></div><p><a name="BId-install-free-software-chapter-pa103"></a>Por lo general, el
    uso de <span><b class="command">make</b></span> obedece a muchas convenciones. Por
    ejemplo:</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-install-free-software-chapter-pa104"></a><span><b class="command">make</b></span> sin
      argumentos simplemente ejecuta la compilación del programa, sin
      instalarlo.</p></li><li><p><a name="BId-install-free-software-chapter-pa105"></a><span><b class="command">make
      install</b></span> compila el programa (aunque no siempre), y
      asegura la instalación de los ficheros necesarios en el lugar
      adecuado del sistema de ficheros. Algunos ficheros no siempre se
      instalan correctamente (<tt class="filename">man</tt>,
      <tt class="filename">info</tt>), ellos deben ser copiados por el
      usuario. Algunas veces, <span><b class="command">make install</b></span> tiene
      que volver a ser ejecutado en los subdirectorios. Por lo
      general, esto pasa con los módulos desarrollados por
      terceros.</p></li><li><p><a name="BId-install-free-software-chapter-pa106"></a><span><b class="command">make
      clean</b></span> borra todos los ficheros temporales creados por
      la compilación, y, en la mayoría de los casos, el fichero
      ejecutable.</p></li></ul></div><p><a name="BId-install-free-software-chapter-pa107"></a>La primera etapa
    para compilar un programa es ingresar (ejemplo imaginario):</p><a name="BId-install-free-software-chapter-sc14"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">$ make
gcc -c glloq.c -o glloq.o
gcc -c init.c -o init.o
gcc -c main.c -o main.o
gcc -lgtk -lgdk -lglib -lXext -lX11 -lm glloq.o init.o main.o -o glloq</pre></td></tr></table><p><a name="BId-install-free-software-chapter-pa108"></a>Excelente, el
    fichero binario está compilado correctamente. Ahora estamos
    preparados para la etapa siguiente, que es la instalación de los
    ficheros de la distribución (ficheros binarios, ficheros de datos,
    etc...) Consulte la sección <a href="install-free-installation.html" title="Instalación">“Instalación”</a>.</p></div><div class="sect2" lang="es"><div class="titlepage"><div><div><h3 class="title"><a name="id2562889"></a>Explicaciones</h3></div></div><div></div></div><p><a name="BId-install-free-software-chapter-pa109"></a><a class="indexterm" name="BId-install-free-software-chapter-it6"></a>Si
    Usted es lo suficientemente curioso para mirar el fichero
    <tt class="filename">Makefile</tt>, encontrará comandos conocidos
    (<span><b class="command">rm</b></span>, <span><b class="command">mv</b></span>, <span><b class="command">cp</b></span>, ...), aunque también encontrará
    algunas cadenas extrañas, de la forma
    <tt class="varname">$(CFLAGS)</tt>.</p><p><a name="BId-install-free-software-chapter-pa110"></a>Estas son <span class="emphasis"><em><a name="BId-install-free-software-chapter-gt14" href="glossary.html#term-variables"><i class="glossterm">variables</i></a></em></span>,
    es decir las cadenas que generalmente se fijan al comienzo del
    fichero <tt class="filename">Makefile</tt>, y luego se reemplazan por
    el valor con el cual están asociadas. Esto es bastante útil cuando
    quiere usar las mismas opciones de compilación varias
    veces a la vez.</p><p><a name="BId-install-free-software-chapter-pa111"></a>Por ejemplo, puede
    mostrar la cadena “<span class="quote"><tt class="literal">pepe</tt></span>” en la
    pantalla usando <span><b class="command">make all</b></span>:</p><a name="BId-install-free-software-chapter-sc15"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">
TEST = pepe
all:
	echo $(TEST)</pre></td></tr></table><p><a name="BId-install-free-software-chapter-pa112"></a>La mayoría de las
   veces, se definen las variables siguientes:</p><div class="orderedlist"><ol type="1"><li><p><a name="BId-install-free-software-chapter-pa113"></a><tt class="varname">CC</tt>:
      este es el compilador que va a utilizar. Generalmente es
      <span><b class="command">cc1</b></span>, que en la mayoría de los sistemas libres, es
      sinónimo de <span><b class="command">gcc</b></span>. Cuando tenga dudas, ponga aquí
      <span><b class="command">gcc</b></span>.</p></li><li><p><a name="BId-install-free-software-chapter-pa114"></a><tt class="varname">LD</tt>:
      este es el programa usado para asegurar la fase de la
      compilación final (consulte la sección <a href="ch12s01.html#steps" title="Las cuatro fases de la compilación">“Las cuatro fases de la compilación”</a>)
      El valor predeterminado es <span><b class="command">ld</b></span>.</p></li><li><p><a name="BId-install-free-software-chapter-pa115"></a><tt class="varname">CFLAGS</tt>:
      estos son los argumentos adicionales que se pasarán al
      compilador durante las primeras etapas de la compilación. Entre
      ellos:</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-install-free-software-chapter-pa116"></a><tt class="option">-I&lt;ruta&gt;</tt>:
	le especifica al compilador donde buscar algunos ficheros de
	encabezado adicionales (por ejemplo:
	<tt class="option">-I/usr/X11R6/include</tt> permite incluir los
	ficheros de encabezado que están en el directorio
	<tt class="filename">/usr/X11R6/include</tt>)</p></li><li><p><a name="BId-install-free-software-chapter-pa117"></a><tt class="option">-D&lt;símbolo&gt;</tt>:
	define un símbolo adicional, útil para los programas cuya
	compilación depende de los símbolos definidos (ejemplo: utilizar el
	fichero <tt class="filename">string.h</tt> si está definida
	<tt class="varname">HAVE_STRING_H</tt>)</p></li></ul></div><p><a name="BId-install-free-software-chapter-pa118"></a>Generalmente hay
      líneas de compilación de la forma:</p><a name="BId-install-free-software-chapter-sc16"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">$(CC) $(CFLAGS) -c pepe.c -o pepe.o</pre></td></tr></table></li><li><p><a name="BId-install-free-software-chapter-pa119"></a><tt class="varname">LDFLAGS</tt>
      (o <tt class="varname">LFLAGS</tt>): estos son los argumentos que se
      usan durante la última etapa de compilación. Entre ellos:</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-install-free-software-chapter-pa120"></a><tt class="option">-L&lt;ruta&gt;</tt>:
	especifica una ruta adicional donde buscar bibliotecas (por
	ejemplo: <tt class="option">-L/usr/X11R6/lib</tt>)</p></li><li><p><a name="BId-install-free-software-chapter-pa121"></a><tt class="option">-l&lt;biblioteca&gt;</tt>:
	especifica una biblioteca adicional para usar durante la
	última etapa de compilación.</p></li></ul></div></li></ol></div></div><div class="sect2" lang="es"><div class="titlepage"><div><div><h3 class="title"><a name="it-does-not-work"></a>¿Qué pasa si... no
    funciona?</h3></div></div><div></div></div><p><a name="BId-install-free-software-chapter-pa122"></a>No tenga pánico, le
    puede pasar a cualquiera. Entre las causas más comunes:</p><div class="orderedlist"><ol type="1"><li><p><a name="BId-install-free-software-chapter-pa123"></a><tt class="literal">glloq.c:16:
       decl.h: No such file or directory</tt> (<tt class="literal">glloq.c
       :16</tt>: <tt class="literal">decl.h</tt>: no hay fichero o
       directorio con ese nombre)</p><p><a name="BId-install-free-software-chapter-pa124"></a>El compilador no
      pudo encontrar el fichero de encabezado correspondiente. Por lo
      tanto, la etapa de configuración del software debería haber
      anticipado este error. Cómo resolver este problema:</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-install-free-software-chapter-pa125"></a>verifique que
	verdaderamente exista el fichero de encabezado en cuestión en
	uno de los directorios siguientes:
	<tt class="filename">/usr/include</tt>,
	<tt class="filename">/usr/local/include</tt>,
	<tt class="filename">/usr/X11R6/include</tt> o en alguno de sus
	subdirectorios. De no ser así, búsquelo por todo el disco (con
	<span><b class="command">find</b></span> o <span><b class="command">locate</b></span>), y, si todavía no lo encuentra,
	verifique que ha instalado la biblioteca de desarrollo
	correspondiente a este fichero de encabezado. Puede encontrar
	ejemplos de los comandos <span><b class="command">find</b></span> y <span><b class="command">locate</b></span> en las
	respectivas páginas Man.</p></li><li><p><a name="BId-install-free-software-chapter-pa126"></a>Verifique que el
	fichero de encabezado se pueda leer (para verificarlo, puede
	ingresar <span><b class="command">less
	&lt;ruta&gt;/&lt;fichero&gt;.h</b></span>)</p></li><li><p><a name="BId-install-free-software-chapter-pa127"></a>Si es un
	directorio como <tt class="filename">/usr/local/include</tt> o como
	<tt class="filename">/usr/X11R6/include</tt>, Usted tiene que
	agregar, a veces, un argumento nuevo al compilador. Abra el
	fichero <tt class="filename">Makefile</tt> correspondiente (tenga
	cuidado de abrir el fichero correcto, los que se encuentran en
	el directorio donde falla la compilación<sup>[<a name="id2563472" href="#ftn.id2563472">36</a>]</sup>) con su editor de
	texto favorito (<span class="application">Emacs</span>, <span class="application">Vi</span>, etc) Busque la línea
	errónea, y agregue la cadena <tt class="option">-I&lt;ruta&gt;</tt>,
	donde <tt class="option">&lt;ruta&gt;</tt> es la ruta donde se puede
	encontrar el fichero de encabezado en cuestión, justo después
	de la llamada del compilador (<tt class="literal">gcc</tt>, o, a
	veces, <tt class="literal">$(CC)</tt>) Si no sabe donde agregar esta
	opción, agréguela al comienzo del fichero, después de
	<tt class="literal">CFLAGS=&lt;algo&gt;</tt> o después de
	<tt class="literal">CC=&lt;algo&gt;</tt>.</p></li><li><p><a name="BId-install-free-software-chapter-pa129"></a>ejecute
	<span><b class="command">make</b></span> de nuevo, y si todavía sigue sin funcionar,
	verifique que esta opción (ver el punto anterior) se agrega
	durante la compilación en la línea errónea.</p></li><li><p><a name="BId-install-free-software-chapter-pa130"></a>si todavía sigue
	sin funcionar, pida ayuda al autor del software, a su gurú
	local, o a la comunidad de software libre para resolver su
	problema (consulte la sección <a href="install-free-support.html#support" title="Soporte técnico">“Soporte técnico”</a>)</p></li></ul></div></li><li><p><a name="BId-install-free-software-chapter-pa131"></a><tt class="literal">glloq.c:28:
       `struct pepe' undeclared (first use this function)</tt>
       (<tt class="literal">glloq.c:28</tt>: “<span class="quote"><tt class="literal">struct
       pepe</tt></span>” no está declarada (esta es la primera
       utilización en esta función))</p><p><a name="BId-install-free-software-chapter-pa132"></a>Las estructuras
      son tipos de datos especiales, que usan todos los programas. El
      sistema define un montón de ellas en los ficheros de
      encabezados. Eso significa que es muy probable que el problema
      sea la falta o el mal uso de un fichero de encabezado. El
      procedimiento correcto para resolver el problema es:</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-install-free-software-chapter-pa133"></a>intente
	verificar si la estructura en cuestión es una estructura
	definida por el programa o por el sistema. Una solución es
	usar el comando <span class="application">grep</span> para ver si la estructura está
	definida en alguno de los ficheros de encabezado.</p><p><a name="BId-install-free-software-chapter-pa134"></a>Por ejemplo,
	cuando Usted está en la raíz de la distribución:</p><a name="BId-install-free-software-chapter-sc17"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">$ find . -name '*.h'| xargs grep 'struct pepe' | less</pre></td></tr></table><p><a name="BId-install-free-software-chapter-pa135"></a>Es posible que
	aparezcan muchas líneas en la pantalla (por ejemplo, cada vez
	que se define una función que use esta estructura) Elija, si
	existe, la línea donde se define la estructura mirando el
	fichero de encabezado obtenido por la utilización del comando
	<span class="application">grep</span>.</p><p><a name="BId-install-free-software-chapter-pa136"></a>La definición de
	una estructura es:</p><a name="BId-install-free-software-chapter-sc18"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">
struct pepe {
    &lt;contenido de la estructura pepe&gt;
};
</pre></td></tr></table><p><a name="BId-install-free-software-chapter-pa137"></a>Verifique si
	ella corresponde a lo que Usted tiene. De ser así, eso
	significa que no se incluye el encabezado en el fichero
	<tt class="filename">.c</tt> erróneo. Hay dos soluciones:</p><div class="itemizedlist"><ul type="circle"><li><p><a name="BId-install-free-software-chapter-pa138"></a>agregar la
	   línea <tt class="option">#include
	   "&lt;nombre_de_fichero&gt;.h"</tt> al comienzo del
	   fichero <tt class="filename">.c</tt> erróneo.</p></li><li><p><a name="BId-install-free-software-chapter-pa139"></a>o copiar y
	  pegar la definición de la estructura al comienzo del fichero
	  <tt class="filename">.c</tt> (esto no es de lo mejor, pero al
	  menos por lo general, funciona)</p></li></ul></div></li><li><p><a name="BId-install-free-software-chapter-pa140"></a>si este no es el
	caso, haga lo mismo con los ficheros de encabezado del sistema
	(que, generalmente, se encuentran en los directorios
	siguientes: <tt class="filename">/usr/include</tt>,
	<tt class="filename">/usr/X11R6/include</tt> y
	<tt class="filename">/usr/local/include</tt>) Pero en este caso,
	use la línea <tt class="literal">#include
	&lt;&lt;nombre_de_fichero&gt;.h&gt;</tt>.</p></li><li><p><a name="BId-install-free-software-chapter-pa141"></a>si todavía no
	existe esta estructura, intente encontrar en que biblioteca
	(es decir, conjunto de funciones agrupadas en un solo paquete)
	debería estar definida (ver en el fichero
	<tt class="filename">INSTALL</tt> o <tt class="filename">README</tt>
	cuales son las bibliotecas que usa este programa y las
	versiones necesarias) Si la versión que necesita el programa
	no está instalada en el sistema, Usted deberá actualizar esta
	biblioteca. Cabe destacar que debe tener sumo cuidado al
	manipular los ficheros de encabezado del sistema, ya que estos
	son comunes a muchos programas.</p></li><li><p><a name="BId-install-free-software-chapter-pa142"></a>si todavía sigue
	sin funcionar, verifique que el programa funciona
	adecuadamente sobre su arquitectura (algunos programas todavía
	no han sido portados a todos los sistemas <span class="application">UNIX</span>) Verifique
	también que ha configurado el programa correctamente (por
	ejemplo, cuando ejecutó <span><b class="command">configure</b></span>) para su
	arquitectura.</p></li></ul></div></li><li><p><a name="BId-install-free-software-chapter-pa143"></a><tt class="literal">parse
      error</tt> (error de análisis sintáctico)</p><p><a name="BId-install-free-software-chapter-pa144"></a>Este es un
      problema que es relativamente complicado de resolver, porque
      generalmente es un error que aparece en cierta línea, pero
      después que el compilador lo encontró. A veces, es simplemente
      un tipo de datos que no está definido. Si Usted encuentra un
      mensaje de error del tipo:</p><a name="BId-install-free-software-chapter-sc19"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">
main.c:1: parse error before `glloq_t
main.c:1: warning: data definition has no type or storage class
</pre></td></tr></table><p><a name="BId-install-free-software-chapter-pa145"></a>entonces el
      problema es que el tipo <tt class="literal">glloq_t</tt> no está
      definido. La solución al problema es más o menos la misma que en
      el problema anterior.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Nota</th></tr><tr><td colspan="2" align="left" valign="top"><p><a name="BId-install-free-software-chapter-pa146"></a>puede haber un
       error del tipo <tt class="literal">parse error</tt> en las
       bibliotecas <tt class="filename">curses</tt> antiguas si la memoria
       no nos falla.</p></td></tr></table></div></li><li><p><a name="BId-install-free-software-chapter-pa147"></a><tt class="literal">no space
      left on device</tt> (no queda espacio en el
      dispositivo)</p><p><a name="BId-install-free-software-chapter-pa148"></a>Este problema
      es simple de resolver: no hay espacio suficiente en el disco
      para generar un fichero binario a partir del fichero fuente. La
      solución consiste en liberar espacio en la partición que
      contiene el directorio de instalación (borrar ficheros
      innecesarios, ficheros temporales, desinstalar programas que no
      use). Si descomprimió en <tt class="filename">/tmp</tt>, mejor hágalo
      en <tt class="filename">/usr/local/src</tt> que evita la saturación
      innecesaria de la partición <tt class="filename">/tmp</tt>. Verifique
      si hay <i class="glossterm"><a name="BId-install-free-software-chapter-gt15"></a>ficheros
      <tt class="filename">core</tt></i><sup>[<a name="id2564115" href="#ftn.id2564115">37</a>]</sup> en
      su disco. De ser así, elimínelos o haga que el usuario al cual
      pertenezcan los elimine.</p></li><li><p><a name="BId-install-free-software-chapter-pa150"></a><tt class="literal">/usr/bin/ld:
       cannot open -lglloq: No such file or directory</tt>
       (<tt class="literal">/usr/bin/ld: no puedo abrir -lglloq: no hay fichero o
       directorio alguno con ese nombre</tt>).</p><p><a name="BId-install-free-software-chapter-pa151"></a>Esto significa
      claramente que el programa <span><b class="command">ld</b></span> (usado por <span><b class="command">gcc</b></span>
      durante la última etapa de la compilación) no puede encontrar
      una biblioteca. Para incluir una biblioteca, <span><b class="command">ld</b></span> busca un
      fichero cuyo nombre está en los argumentos del tipo
      <tt class="option">-l&lt;biblioteca&gt;</tt>. Este fichero es
      <tt class="option">lib&lt;biblioteca.so&gt;</tt>. Si <span><b class="command">ld</b></span> no puede
      encontrarlo, produce un mensaje de error. Para resolver el
      problema, siga los pasos que se indican a continuación:</p><div class="orderedlist"><ol type="a"><li><p><a name="BId-install-free-software-chapter-pa152"></a>verifique
	que el fichero existe en el disco rígido usando el comando
	<span><b class="command">locate</b></span>. Por lo general, las bibliotecas gráficas se
	encuentran en <tt class="filename">/usr/X11R6/lib</tt>. Por
	ejemplo:</p><a name="BId-install-free-software-chapter-sc20"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">$ locate libglloq</pre></td></tr></table><p><a name="BId-install-free-software-chapter-pa153"></a>Si la búsqueda no tiene resultado, puede buscar
	con el comando <span><b class="command">find</b></span> (ejemplo: <span><b class="command">find /usr -name
	"libglloq.so*"</b></span>) Si Usted no puede encontrar la
	biblioteca, entonces tendrá que instalarla.</p></li><li><p><a name="LD-LIBRARY-PATH"></a><a name="BId-install-free-software-chapter-pa154"></a>una vez que está
	localizada la biblioteca, verifique que <span><b class="command">ld</b></span> puede
	accederla: el fichero que especifica donde encontrar estas
	bibliotecas es <tt class="filename">/etc/ld.so.conf</tt>. Agregue
	el directorio en cuestión al final del mismo y ejecute
	<span><b class="command">ldconfig</b></span>. También puede agregar este
	directorio a la variable de entorno
	<tt class="varname">LD_LIBRARY_PATH</tt>. Por ejemplo, si el
	directorio a agregar es <tt class="filename">/usr/X11R6/lib</tt>,
	ingrese:</p><a name="BId-install-free-software-chapter-sc21"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/X11R6/lib</pre></td></tr></table><p><a name="BId-install-free-software-chapter-pa155"></a>(si su
	shell es <span class="application">bash</span>)</p></li><li><p><a name="BId-install-free-software-chapter-pa156"></a>si todavía
	no funciona, verifique que el formato de la biblioteca en
	cuestión es un fichero ejecutable (o <span class="acronym">ELF</span>) (con el comando
	<span><b class="command">file</b></span>) Si esta es un vínculo simbólico, verifique que el
	vínculo es correcto y no apunta a un fichero inexistente (por
	ejemplo, con <span><b class="command">nm &lt;lib&gt;</b></span>). Los permisos
	pueden ser erróneos (por ejemplo, Usted usa una cuenta que no
	es <tt class="literal">root</tt> y la biblioteca está protegida contra
	lectura).</p></li></ol></div></li><li><p><a name="BId-install-free-software-chapter-pa157"></a><tt class="literal">glloq.c(.text+0x34):
       undefined reference to
       `<tt class="filename">glloq_init</tt>'</tt>
       (<tt class="literal">glloq.c(.text+0x34)</tt>: referencia indefinida
       al símbolo `<tt class="filename">glloq_init</tt>')</p><p><a name="BId-install-free-software-chapter-pa158"></a>Esto significa que
      no se resolvió un símbolo durante la última etapa de la
      compilación. Por lo general, este es un problema de biblioteca.
      Puede haber varias causas:</p><div class="itemizedlist"><ul type="disc"><li><p><a name="BId-install-free-software-chapter-pa159"></a>la primera cosa
	a hacer es saber si se <span class="emphasis"><em>supone</em></span> que el
	símbolo esté presente en una biblioteca. Por ejemplo, si es un
	símbolo que comienza por <tt class="literal">gtk</tt>, pertenece a
	la biblioteca <tt class="literal">gtk</tt>. Si el nombre de la
	biblioteca es difícil de identificar (como por ejemplo,
	<tt class="filename">zorglub_gloubiboulga</tt>), se pueden listar
	los símbolos de una biblioteca con el comando
	<span><b class="command">nm</b></span>. Por ejemplo,</p><a name="BId-install-free-software-chapter-sc22"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">$ nm libglloq.so
0000000000109df0 d glloq_message_func
000000000010a984 b glloq_msg
0000000000008a58 t glloq_nearest_pow
0000000000109dd8 d glloq_free_list
0000000000109cf8 d glloq_mem_chunk</pre></td></tr></table><p><a name="BId-install-free-software-chapter-pa160"></a>Agregar la
	opción <tt class="option">-o</tt> a <span><b class="command">nm</b></span> permite
	mostrar el nombre de la biblioteca en cada línea, lo cual
	facilita la búsqueda. Imaginemos que buscamos el símbolo
	<tt class="literal">bulgroz_max</tt>, una solución cruda es realizar
	una búsqueda del tipo:</p><a name="BId-install-free-software-chapter-sc23"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">$ nm /usr/lib/lib*.so | grep bulgroz_max
$ nm /usr/X11R6/lib/lib*.so | grep bulgroz_max
$ nm /usr/local/lib/lib*.so | grep bulgroz_max
/usr/local/lib/libfrobnicate.so:000000000004d848 T bulgroz_max</pre></td></tr></table><p><a name="BId-install-free-software-chapter-pa161"></a>¡Formidable! El
	símbolo <tt class="literal">bulgroz_max</tt> está definido en la
	biblioteca <tt class="filename">zorglub</tt> (la letra mayúscula
	<tt class="literal">T</tt> se encuentra delante de su nombre)
	Entonces, Usted sólo tiene que agregar la cadena
	<tt class="literal">-lzorglub</tt> en la línea de compilación
	editando el fichero <tt class="filename">Makefile</tt>: agréguela
	al final de la línea donde se define la variable
	<tt class="varname">LDFLAGS</tt> o <tt class="varname">LFGLAGS</tt> (o, en
	el peor de los casos, <tt class="varname">CC</tt>), o en la línea
	correspondiente a la creación del fichero binario
	final.</p></li><li><p><a name="BId-install-free-software-chapter-pa162"></a>la compilación
	está hecha con una versión de la biblioteca que no es la que
	permite el software. Lea el fichero
	<tt class="filename">README</tt> o <tt class="filename">INSTALL</tt> de
	la distribución para saber que versión de la biblioteca debe
	usar.</p></li><li><p><a name="BId-install-free-software-chapter-pa163"></a>no todos los
	ficheros objeto de la distribución están vinculados
	correctamente. Falta, o no se menciona, el fichero donde está
	definida esta función. Ingrese <span><b class="command">nm -o *.o</b></span>,
	para saber el nombre del fichero <tt class="filename">.o</tt>
	correspondiente y agréguelo en la línea de compilación si es
	que falta.</p></li><li><p><a name="BId-install-free-software-chapter-pa164"></a>la función o
	variable en cuestión puede ser fantasiosa. Intente eliminarla:
	edite el fichero fuente en cuestión (el nombre del mismo se
	especifica al comienzo del mensaje de error) Esta es una
	solución desesperada cuya consecuencia ciertamente será un
	funcionamiento anárquico del software (<i class="glossterm"><a name="BId-install-free-software-chapter-gt16"></a>error de
	segmentación</i> en el arranque, etc.)</p></li></ul></div></li><li><p><a name="BId-install-free-software-chapter-pa165"></a><tt class="literal">Segmentation
      fault (core dumped)</tt> (Error de segmentación (se produjo
      un fichero <tt class="filename">core</tt>)).</p><p><a name="BId-install-free-software-chapter-pa166"></a>A veces, el
      compilador se cuelga lamentablemente y produce este mensaje de
      error. No tengo consejo alguno, salvo pedirle que instale una
      versión más reciente de su compilador.</p></li><li><p><a name="BId-install-free-software-chapter-pa167"></a>no queda espacio
      en <tt class="filename">/tmp</tt></p><p><a name="BId-install-free-software-chapter-pa168"></a>La compilación
      necesita espacio temporal durante las diferentes etapas; si no
      tiene espacio suficiente, falla. Por lo tanto, debe limpiar la
      partición, pero debe tener cuidado ya que algunos programas en
      curso de ejecución (servidor <span class="application">X</span>, tuberías...) se pueden
      colgar si se borran algunos ficheros. ¡Usted debe saber lo que
      está haciendo! Si <tt class="filename">tmp</tt> es parte de una
      partición que no la contiene solamente (por ejemplo, la raíz),
      busque y borre algunos ficheros <tt class="filename">core</tt>
      eventuales.</p></li><li><p><a name="BId-install-free-software-chapter-pa169"></a><span><b class="command">make</b></span>
      / <span><b class="command">configure</b></span> en bucle infinito</p><p><a name="BId-install-free-software-chapter-pa170"></a>Generalmente, esto
      es un problema de la hora en su sistema. En efecto, <span><b class="command">make</b></span>
      necesita saber la fecha y la hora de la computadora y de los
      ficheros que verifica. Este compara las fechas de los ficheros y
      usa el resultado para saber si el objetivo es más reciente que
      la dependencia.</p><p><a name="BId-install-free-software-chapter-pa171"></a>Algunos problemas
      en la fecha pueden inducir a <span><b class="command">make</b></span> a reconstruirse a sí
      mismo indefinidamente (o a construir y reconstruir un subárbol
      en bucle) Si es así, el uso del comando
      <span><b class="command">touch</b></span> (cuya consecuencia es poner en la hora
      corriente a los ficheros pasados como argumento) resuelve el
      problema la mayoría de las veces.</p><p><a name="BId-install-free-software-chapter-pa172"></a>Por
      ejemplo:</p><a name="BId-install-free-software-chapter-sc24"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">$ touch *</pre></td></tr></table><p><a name="BId-install-free-software-chapter-pa173"></a>O también (más
      bruto, pero eficiente):</p><a name="BId-install-free-software-chapter-sc25"></a><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="screen">$ find . | xargs touch</pre></td></tr></table></li></ol></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id2563472" href="#id2563472">36</a>] </sup>Analice el mensaje de error que devuelve
	<span><b class="command">make</b></span>. Normalmente, las últimas líneas deberían contener
	un directorio (un mensaje como <tt class="literal">make[1]: Leaving
	directory `/home/reina/Proyecto/pepe'</tt>). Elija
	aquel que tiene el número más grande. Para verificar que es el
	bueno, vaya al directorio y ejecute <span><b class="command">make</b></span> de nuevo para
	obtener el mismo error.</p></div><div class="footnote"><p><sup>[<a name="ftn.id2564115" href="#id2564115">37</a>] </sup>Fichero generado
      por el sistema cuando un proceso intenta acceder a una ubicación
      de memoria a la cual no tiene permiso para acceder. Estos
      archivos se utilizan para analizar la razón de tal
      comportamiento para corregir el problema.</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="install-free-config.html">Anterior</a> </td><td width="20%" align="center"><a accesskey="u" href="install-free-software-chapter.html">Subir</a></td><td width="40%" align="right"> <a accesskey="n" href="install-free-installation.html">Siguiente</a></td></tr><tr><td width="40%" align="left" valign="top">Configuración </td><td width="20%" align="center"><a accesskey="h" href="index.html">Inicio</a></td><td width="40%" align="right" valign="top"> Instalación</td></tr></table></div></body></html>