SlideShare ist ein Scribd-Unternehmen logo
1 von 10
Downloaden Sie, um offline zu lesen
Introducci´n a la compilaci´n en ambiente Unix
                    o                o
                                      Luis C. P´rez Tato
                                               e
                                      27 de julio de 2012


´
Indice                                              1.     Introducci´n
                                                                     o
                                                    Este art´ıculo se redacta pensando en aque-
1. Introducci´n
              o                                1 llas personas que tienen conocimientos de in-
   1.1. ¿Porqu´ tengo que compilar el
              e                                  form´tica a nivel de usuario y desean aprender
                                                      a
        programa? . . . . . . . . . . . . .    1 a compilar e instalar programas que se distri-
                                                 buyen en forma de c´digo fuente. En particular
                                                                       o
2. Compilaci´n o                               2 se pretende facilitar la instalaci´n del programa
                                                                                   o
   2.1. Estructura del c´digo fuente . . .
                         o                     2 Xc1 .
   2.2. Bibliotecas de funciones . . . . .     3    Con ese fin se introducen algunos conceptos
        2.2.1. Ejemplo de funci´n de bi-
                                 o               b´sicos acerca de la generaci´n de c´digo eje-
                                                   a                             o        o
                blioteca . . . . . . . . . .   4 cutable para, posteriormente, explicar c´mo se
                                                                                             o
   2.3. Problemas que pueden presen-             resuelven los problemas m´s frecuentes a la ho-
                                                                              a
        tarse al compilar el programa . .      4 ra de compilar un programa en un ambiente
        2.3.1. Archivos de cabecera . . .      4 ligeramente diferente al de la m´quina en que
                                                                                     a
        2.3.2. No se encuentra un archi-         se cre´.
                                                       o
                vo de cabecera . . . . . .     5
                                                    Aunque frecuentemente se emplea la palabra
3. Enlace                                      6 compilar para referirse a la obtenci´n de un
                                                                                          o
   3.1. Problemas que pueden presen-             programa ejecutable a partir del c´digo fuente
                                                                                        o
        tarse al enlazar el programa . . .     6 del mismo, en realidad dicho proceso requiere
        3.1.1. Archivos de biblioteca . .      6 realizar dos operaciones: compilaci´n y enlace.
                                                                                        o
        3.1.2. No se encuentra la defini-         M´s adelante se explica brevemente en qu´ con-
                                                    a                                         e
                ci´n de una funci´n . . .
                  o               o            6 sisten estas operaciones.
        3.1.3. No se encuentra un archi-            En las p´ginas siguientes se intentar´ trans-
                                                             a                              a
                vo de biblioteca . . . . . .   6 mitir al lector los conocimientos b´sicos necesa-
                                                                                      a
                                                 rios que le permitan iniciarse en el uso de pro-
4. La herramienta «Make»                       7 gramas distribuidos en forma de c´digo fuente.
                                                                                       o

5. Sistemas de compilaci´n integra-
                            o
   dos (CMake,. . . )                      7
                                             1.1. ¿Porqu´ tengo que compilar
                                                                e
   5.1. Empleo de CMake . . . . . . . .    7         el programa?
   5.2. Autoconf . . . . . . . . . . . . . 7    Puede que uno se pregunte acerca de la nece-
                                             sidad de compilar el programa en lugar de em-
6. Las instrucciones de compilaci´n   o    7
                                             plear un c´modo programa de instalaci´n que
                                                         o                           o
7. Conclusi´n
            o                              7 oculte al usuario la complejidad del proceso de
                                             generar c´digo ejecutable para una m´quina de-
                                                       o                          a
                                             terminada.
                                                Cuando un programa est´ dise˜ado para eje-
                                                                        a     n
                                             cutarse en un s´lo sistema operativo que co-
                                                              o
                                                       1 Xc es un programa de an´lisis de estructuras me-
                                                                                  a
                                                    diante elementos finitos de c´digo abierto
                                                                                o
                                                1
www.xcingenieria.com                                    ´
                                                                          Pagina:        2 de 10
 T´
  ıtulo:          Compilar un programa. . . .                             Fecha:         27 de julio de 2012
 Apartado:        2 COMPILACION ´                                               ´
                                                                          Revision:      0


rre sobre un s´lo tipo de m´quina (por ejemplo
               o            a                             2.      Compilaci´n
                                                                           o
OS X y Mac) es relativamente sencillo generar
un ejecutable v´lido para dichas m´quinas y un
                 a                  a                        Compilar, en nuestro contexto, consiste en
programa de instalaci´n que se encargue de co-
                       o                                  «traducir» el c´digo fuente escrito en un len-
                                                                              o
locar el archivo ejecutable y otros archivos que          guaje de alto nivel (C, C++, Fortran,. . . ) a una
sean necesarios para la ejecuci´n, en los lugares
                               o                          secuencia de instrucciones directamente inter-
adecuados.                                                pretable por el procesador (Intel, Sparc, Moto-
   Sin embargo, si lo que se pretende es que el           rola,. . . ) (lenguaje de m´quina).
                                                                                     a
programa se pueda instalar en una familia de                 Para hacerse una idea de qu´ aspecto tiene el
                                                                                          e
m´quinas tan amplia como sea posible la solu-
  a                                                       lenguaje de m´quina puede examinarse la figura
                                                                            a
ci´n anterior no resulta tan sencilla de aplicar.
  o                                                       1.
El problema radica en la variedad de arquitec-
turas para las que hay que resolver la instala-
ci´n. Por ejemplo considerando s´lo las arqui-
  o                                o                      2.1.     Estructura del c´digo fuente
                                                                                   o
tecturas de hardware m´s populares tendremos:
                         a
                                                            El c´digo fuente de un programa estar´ for-
                                                                  o                                          a
                                                         mado por el del programa principal y las bi-
      Intel IA-32.                                       bliotecas de funciones que acompa˜an a ´ste.    n     e
                                                         Para dar una idea de en qu´ consiste esto en
                                                                                                e
      Intel IA-64.                                       los p´rrafos siguientes se desarrolla un ejemplo
                                                               a
                                                         que, aun siendo trivial, contiene los elementos
      AMD64.                                             b´sicos que forman el problema. Por otra parte
                                                           a
                                                         en la figura 2 se intentan representar las relacio-
   Por otra parte sobre esa arquitectura podr´       ıa- nes de dependencia del programa con el sistema
mos encontrar distintas distribuciones de Linux operativo y el hardware en el que se pretende
(Ubuntu, Linux Mint, Debian, Red Hat, Suse, ejecutar.
Fedora,. . . ) u otros sistemas de similares carac-         Supongamos que tenemos un archivo de nom-
ter´ısticas HP-UX, IBM-AIX, Solaris, etc´tera. bre hola.cc con el siguiente contenido:
                                                e
   El coste de elaborar soluciones para la ins-
talaci´n, aunque s´lo fuera para unas pocas de #include <i o s t r e a m >
       o               o
                                                         i n t main ( )
entre las combinaciones posibles, es muy gran-
                                                             {
de2 .                                                           s t d : : c o u t << ”Hola a t o d o s . ”
   Si en lugar de ello lo que se hace es distri-                                  << s t d : : e n d l ;
buir el c´digo fuente y dejar al usuario la tarea
           o                                                   return 0 ;
de compilarlo el problema se simplifica bastan-               }
te y la tarea que se traslada al usuario no es
demasiado complicada en la mayor parte de los como el nombre del archivo lleva la extensi´n                      o
casos  3                                                 «cc» suponemos que se trata de un programa
   Como puede ver el argumento es muy similar escrito en C++ (si estuviera escrito en FOR-
a los que emplea una conocida cadena de dis- TRAN deber´ llevar la extensi´n «for», en
                                                                             ıa                        o
tribuci´n de muebles para justificar que sea el
         o                                               Python la extensi´n «py»,. . . ). Por otra par-
                                                                                   o
cliente el que tenga que transportarlos hasta su te como en el programa se define la funci´n                      o
casa y montarlos.                                        «main» sabemos que el archivo corresponde al
                                                         programa principal ya que en C++ (y en C) la
   2 Las distintas distribuciones de Linux resuelven es- funci´n que se ejecuta al lanzar la ejecuci´n del
                                                               o                                             o
te problema empleando a personas (los denominados programa es precisamente ´sta.             e
«package maintainers») que se dedican a adaptar un
                                                            Si examinamos la primera l´         ınea del c´digo en
                                                                                                           o
programa determinado (como por ejemplo Gimp www.
gimp.org) a la distribuci´n en cuesti´n.
                          o           o                  la que se lee #include <iostream> deducimos
   3 La tarea ser´ tanto m´s complicada cuanto m´s di-
                 a         a                      a      que el programa emplea el archivo de cabece-
ferente sea la m´quina en la que se pretende compilar ra denominado «iostream» y, con un poco de
                 a
el programa de aquella en la que se cre´ el mismo. Por
                                        o
                                                         esfuerzo se puede averiguar (aunque en general
ejemplo si se intenta compilar un programa dise˜ ado
                                                   n
para Unix en una m´quina Windows el dolor de cabeza no ser´ necesario) que en un sistema Debian Li-
                     a                                           a
est´ pr´cticamente garantizado.
   a a                                                   nux versi´n 6 esto implica usar la biblioteca de
                                                                      o
www.xcingenieria.com                              ´
                                                                          Pagina:         3 de 10
  T´
   ıtulo:               Compilar un programa. . . .                       Fecha:          27 de julio de 2012
  Apartado:             2 COMPILACION ´                                         ´
                                                                          Revision:       0


funciones «LibCXX 3.4» que forma parte del                    Ahora el proceso para generar el ejecutable
sistema operativo.                                          un poco m´s complicado. Primero deberemos
                                                                       a
   As´ que el programa hola.cc est´ formado
      ı                               a                     compilar la biblioteca de funciones. Para ello
por un unico archivo y (en mi sistema) s´lo usa
         ´                                o                 teclear´
                                                                   ıamos:
la biblioteca de funciones LibCXX versi´n 3.4.
                                          o
Si el lector usa alguna variante de Unix y quiere           g++ -c bibHola.cc -o bibHola.o
compilar este programa, con el compilador de
GNU, puede hacerlo mediante:                                y a continuaci´n generaremos el ejecutable me-
                                                                          o
                                                            diante:
g++ hola.cc -o hola
   Para ilustrar el caso general, en el que el pro- g++ bibHola.o hola.cc -o hola
grama a compilar emplea bibliotecas de fun-
ciones cuyo c´digo fuente se suministra con el
                    o                                  El ejemplo descrito hasta aqu´ a pesar de su
                                                                                    ı,
mismo, escribiremos el archivo bibHola.h que        simplicidad, ilustra las principales tareas que
contendr´ lo siguiente:
            a                                       deben realizarse para compilar cualquier pro-
                                                    grama. En los apartados siguientes se desarro-
// b i b H o l a . h
                                                    llan un poco m´s algunos aspectos de lo tratado
                                                                   a
#i f n d e f BIBHOLA H                              aqu´ de forma tan superficial.
                                                        ı
#define BIBHOLA H
                                                            2.2.    Bibliotecas de funciones
#include <s t r i n g >
                                                              Un microprocesador es capaz, por s´ solo, de
                                                                                                ı
void p r i n t m s g ( const s t d : : s t r i n g &msg ) ;ejecutar instrucciones sencillas como la suma,
                                                            resta y producto de n´meros. Tambi´n existen
                                                                                       u               e
#endif
                                                            microprocesadores que incorporan rutinas pa-
   Este ser´ el archivo de cabecera de nuestra
           a                                                ra procesar operaciones no tan sencillas como
biblioteca en el que se declara una sola funci´n
                                              o             evaluar funciones trigonom´tricas4 , logaritmos,
                                                                                            e
a la que hemos llamado pring_msg.                           etc´tera.
                                                               e
   La implementaci´n de la funci´n la escri-
                     o              o                          El resto de las operaciones que realiza un pro-
biremos en un archivo al que llamaremos                     grama (mostrar texto y figuras en un monitor,
bibHola.cc y aqu´ definiremos lo que hace la
                   ı                                        leer y escribir en discos duros, memorias USB
funci´n:
     o                                                      y perif´ricos de todo tipo,. . . ) se realizan con el
                                                                    e
// b i b H o l a . cc                                       auxilio de lo que llamamos funciones de biblio-
                                                            teca. Ese es el motivo de que cuando se adquiere
#include ”b i b Ho l a . h ”                                un elemento de hardware nuevo (tarjeta de v´       ı-
#include <i o s t r e a m >                                 deo, esc´ner,. . . ) venga acompa˜ado de un dis-
                                                                      a                           n
                                                            co con sus «drivers», es decir, con las funciones
void p r i n t m s g ( const s t d : : s t r i n g &msg )   de biblioteca que permitir´n al sistema opera-
                                                                                           a
  {                                                         tivo de la m´quina y a otras aplicaciones mane-
                                                                         a
    s t d : : c o u t << msg << s t d : : e n d l ;         jar el dispositivo (mostrar gr´ficos 3D, escanear
                                                                                              a
  }
                                                            documentos,. . . ).
  Por ultimo modificaremos el contenido del ar-
      ´                                                        Estas funciones de biblioteca no son m´s que
                                                                                                          a
chivo hola.cc como sigue:                                   secuencias de instrucciones b´sicas que sirven
                                                                                                a
#include ”b i b Ho l a . h ”                                para facilitar la ejecuci´n de una operaci´n re-
                                                                                        o                  o
in t main ( void )                                          lativamente compleja (por ejemplo calcular el
   {                                                        determinante de una matriz), o acceder a de-
     p r i n t m s g ( ”Hola a t o d o s . ” ) ;            terminada caracter´    ıstica de determinado hard-
     return 0 ;                                             ware (por ejemplo borrar lo que se muestra en
   }                                                        pantalla).
  Ahora el programa principal usa la funci´n
                                           o                  4A los usuarios m´s veteranos de ordenadores de ti-
                                                                                a
pring_msg de nuestra raqu´ıtica biblioteca de               po PC les resultar´ familiar el t´rmino «coprocesador
                                                                              a              e
funciones «bibHola».                                        matem´tico» que populariz´ Intel en los a˜os 80.
                                                                 a                     o             n
www.xcingenieria.com                                 ´
                                                                          Pagina:         4 de 10
 T´
  ıtulo:             Compilar un programa. . . .                          Fecha:          27 de julio de 2012
 Apartado:           2 COMPILACION ´                                            ´
                                                                          Revision:       0


2.2.1.     Ejemplo de funci´n de biblioteca
                           o                               OS, y .obj en los sistemas operativos de Mi-
                                                           crosoft7 .
   Para dar una idea un poco m´s aproximada
                                         a
de lo que se intenta describir en este apartado
pondremos un ejemplo trivial.                             2.3. Problemas que pueden pre-
   Supongamos una funci´n que se encarga de
                                o                                 sentarse al compilar el pro-
cambiar el color de un p´ en la pantalla. Es-
                               ıxel                               grama
ta funci´n podr´ recibir como argumentos las
        o          ıa
                                                             En lo que sigue se supone que tratamos de
coordenadas x e y del p´        ıxel en cuesti´n y los
                                                   o
               5                                          compilar un programa que se cre´ y prob´ con
                                                                                            o       o
valores RGB . Su declaraci´n en C++ ser´ se-
                                  o                    ıa
                                                          ´xito en otra m´quina y por tanto est´ libre
                                                          e                a                      a
mejante a esta:
                                                          de errores sint´cticos. Dicho de otro modo, los
                                                                         a
in t c o l o r p i x e l ( in t x , i n t y , f l o a t r problemas de los que se hablar´ aqu´ son los
                                                                                           a    ı
 , float g , float b ) ;                                  debidos a las diferencias que pueden existir en-
   Cuando el compilador se encuentra con una tre la m´quina en la que pretendemos compilar
                                                                  a
llamada a esta funci´n como, por ejemplo, la
                           o                              el programa y aquella en la que se desarroll´ y
                                                                                                       o
siguiente:                                                prob´ el mismo.
                                                               o

    ok= c o l o r p i x e l ( 4 0 0 , 3 0 0 ,              2.3.1.    Archivos de cabecera
0 . 5 , 0 . 5 , 0 . 5 ) ; // g r i s .
                                                 Para que el compilador pueda generar el c´-o
generar´ las instrucciones del microprocesador digo que servir´ para llamar a las funciones de
        a                                                     a
que sirvan para:                               biblioteca necesita conocer:
 1. Colocar en la pila6 los cinco valores que                   El nombre de la funci´n a llamar.
                                                                                     o
    emplear´ la funci´n, en este caso: 400, 300,
             a       o
    0.5, 0.5, 0.5.                                              El n´mero de argumentos que recibir´ la
                                                                    u                              a
                                                                funci´n y su orden.
                                                                     o
 2. Colocar a continuaci´n la llamada a la fun-
                        o
                                                                El tipo de cada uno de los argumentos
    ci´n. Esto har´ que, cuando se ejecute el
      o             a
                                                                (entero, coma flotante, cadena de caracte-
    programa, el c´digo de dicha funci´n reco-
                    o                   o
                                                                res,. . . ).
    ja los cinco argumentos de la pila y ejecute,
    empleando esos valores, las instrucciones                   El tipo de valor que, en su caso, devuelve
    que sean necesarias (llamadas a la tarjeta                  la funci´n.
                                                                        o
    gr´fica,. . . ).
      a
                                                              Para verificar que la llamada a la funci´n   o
 3. Generar el c´digo para, en su caso, alma-
                 o                                         puede hacerse correctamente el compilador ne-
    cenar el valor devuelto por la funci´n en
                                        o                  cesita acceder a la declaraci´n de la funci´n (en
                                                                                        o             o
    alguna variable cuyo nombre le habremos                la que se definen los datos de la lista anterior).
    indicado. En este caso: ok.                            En C y C++ esto se resuelve empleando lo que
                                                           se llama archivos de cabecera. Estos archivos
   Una vez que termina el proceso de compila-              contienen la declaraci´n de las funciones y va-
                                                                                   o
ci´n tendremos, por cada uno de los archivos
  o                                                        riables de la biblioteca de funciones a la que
fuente que hayamos compilado, un archivo ob-               corresponden.
jeto que contendr´ las instrucciones del progra-
                   a                                          Por ejemplo en el cuadro 1 puede verse la de-
ma en c´digo m´quina con llamadas a funciones
        o       a                                          claraci´n de la funci´n getMemoryUsed que no
                                                                  o              o
de biblioteca intercaladas. Estos archivos suelen          recibe argumentos y devuelve un entero largo
tener la extensi´n .o en sistemas Unix y Mac
                 o                                         sin signo. Una llamada a esta funci´n dentro
                                                                                                  o
   5 Estos valores son sencillamente las intensidades de
                                                           del c´digo fuente podr´ ser:
                                                                o                   ıa
color rojo (red: R), verde (green: G) y azul (blue: B)        7 Como se ha dicho anteriormente, compilar bajo

que definen el color a mostrar en el p´ıxel.                Windows un programa desarrollado en Unix es una ta-
   6 Los que sean usuarios de calculadoras HP con no-      rea muy dif´ salvo que se trate de un programa ex-
                                                                       ıcil
taci´n polaca inversa (RPN) ya saben lo que es una
    o                                                      tremadamente simple o el desarrollador previera dicha
pila, los que no tengan esa suerte pueden consultar la     posibilidad. En este documento se citan distintos siste-
referencia [2].                                            mas operativos para que sea lo m´s general posible.
                                                                                           a
www.xcingenieria.com                                   ´
                                                                          Pagina:      5 de 10
 T´
  ıtulo:           Compilar un programa. . . .                            Fecha:       27 de julio de 2012
 Apartado:         2 COMPILACION ´                                              ´
                                                                          Revision:    0



// memoria . h                                dicha biblioteca. Una vez instalada la biblio-
                                              teca OpenGL, este archivo puede encontrarse,
#i f n d e f MEMORIA H                        dependiendo del sistema que usemos, en las ubi-
#define MEMORIA H                             caciones que se dan en la tabla 3.
                                                 El procedimiento que se emplea para indicar
unsigned long getMemoryUsed ( void ) ;        al compilador la ubicaci´n de los archivos de ca-
                                                                      o
                                              becera var´ de unos sistemas a otros. Por ejem-
                                                         ıa
#endif                                        plo si estamos empleando el compilador GNU
                                              C++ se emplea la opci´n -I seguida del direc-
                                                                      o
Cuadro 1: Ejemplo de archivo de cabecera (muy torio en el que se encuentran los archivos de
peque˜o).
        n                                     cabecera. En el caso de que estuvi´ramos em-
                                                                                   e
                                              pleando este compilador en una m´quina HP-
                                                                                   a
                                              UX usar´ ıamos:
unsigned long memOcupada= 0 ;
memOcupada= getMemoryUsed ( ) ;                              g++ -I/opt/graphics/OpenGL/include
                                                                programa.cc
   Con ambas informaciones (la declaraci´n y o
la llamada) el compilador puede establecer la                  Si adem´s necesit´ramos emplear otro archi-
                                                                      a         a
correspondencia entre los argumentos en la lla-              vo de cabecera que estuviera en el directorio
mada y en la declaraci´n. Tambi´n puede esta-
                        o          e                         /usr/local/include.
blecer la correspondencia entre el valor devuelto
por la funci´n y la variable a la que se asigna
             o                                               g++ -I/opt/graphics/OpenGL/include
(getMemoryUsed).                                               -I/usr/local/include programa.cc
   Para poder hacer todo esto el compilador ne-
cesita tener acceso al archivo de cabecera, es de-           2.3.2.   No se encuentra un archivo de ca-
cir conocer su ubicaci´n en el sistema de archi-
                       o                                              becera
vos (por ejemplo /usr/include/math.h). Es-
tos archivos se colocan en distintos directorios                De lo anterior se deduce que cuando el com-
dependiendo del sistema operativo que estemos                pilador emite un mensaje de error como:
usando y de la forma en que se haya instala-                 error: blas.h: No existe el
do la biblioteca cuya interfaz8 definen (paquete               fichero o el directorio
binario, compilada por el usuario,. . . ).
   Aunque, como veremos m´s adelante, exis-
                               a                             puede deberse a dos razones:
ten herramientas para facilitar la soluci´n de
                                            o
este problema, para que el compilador pueda                   1. Realmente el archivo blas.h no est´ ins-
                                                                                                      a
acceder a determinado archivo de cabecera es                     talado en el sistema. Para cerciorarnos de
necesario asegurarse de que:                                     ello en los sistemas Unix podemos usar el
                                                                 comando:
  1. La versi´n de desarrollo 9 de la biblioteca
              o
     est´ instalada en el sistema.
        a                                                        locate blas.h

  2. El compilador conoce la ubicaci´n del ar-
                                    o                            Si efectivamente el archivo no est´ instala-
                                                                                                   a
     chivo de cabecera.                                          do probablemente se deba a que no se ha
                                                                 instalado la biblioteca a la que pertenece
  Veamos esto con un ejemplo. Supongamos                         el archivo. En sistemas Debian esto puede
que queremos compilar un programa que hace                       averiguarse empleando el comando:
uso de la biblioteca OpenGL y para ello llama
a funciones declaradas en el archivo (gl.h) de                   apt-file search blas.h
   8 El archivo de cabecera al definir el modo en que se
                                                                 Si en su sistema no dispone de una utilidad
puede llamar a las distintas rutinas de la biblioteca a la
que pertenece constituye su interfaz.
                                                                 similar puede utilizar b´squedas de Google
                                                                                         u
   9 La que proporciona los archivos de cabecera de la           para inferir a qu´ biblioteca pertenece el
                                                                                   e
biblioteca.                                                      archivo.
www.xcingenieria.com                              ´
                                                                   Pagina:       6 de 10
 T´
  ıtulo:         Compilar un programa. . . .                       Fecha:        27 de julio de 2012
 Apartado:       3 ENLACE                                                ´
                                                                   Revision:     0


 2. El archivo s´ est´ instalado pero el com-
                 ı     a                             3.1.2.   No se encuentra la definici´n de
                                                                                        o
    pilador no puede localizarlo. En este caso                una funci´n
                                                                       o
    el problema es que falta la opci´n -I que
                                     o
                                                        Aunque el programa enlazara correctamente
    indica al compilador la ubicaci´n del ar-
                                     o
                                                     en el sistema que se cre´ es posible que en nues-
                                                                              o
    chivo. Si se tiene acceso al comando que
                                                     tro sistema la definici´n de alguna funci´n est´
                                                                            o                  o     e
    lanza la ejecuci´n del compilador bastar´
                     o                        a
                                                     en un archivo de biblioteca distinto. En este ca-
    con a˜adir esta opci´n. Por el contrario si
          n              o
                                                     so el enlazador emitir´ un mensaje parecido al
                                                                            a
    se emplean medios m´s sofisticados para
                           a
                                                     el que sigue (el texto importante es el que reza
    compilar el programa como make, CMa-
                                                     «undefined reference to»):
    ke o automake y no conocemos su funcio-
    namiento ser´ necesario contactar con el
                   a                                 blas_example.c:(.text+0xaf): undefined
    desarrollador para indicarle el problema.         reference to ‘ddot_’
                                                        En general para localizar el archivo de biblio-
                                                     teca en el que se define una funci´n comenza-
                                                                                         o
3.       Enlace                                      remos por localizar el archivo de cabecera en el
                                                     que se declara la funci´n. Localizado ´ste, es fre-
                                                                            o              e
   Una vez que disponemos del c´digo objeto del
                                 o                   cuente que (en los sistemas Unix) el archivo que
programa, para generar el c´digo ejecutable, se
                              o                      contiene los binarios correspondientes tenga el
deber´ colocar en el sitio adecuado el c´digo eje-
        a                               o            mismo nombre precedido del prefijo lib. Por
cutable de las funciones de biblioteca a las que     ejemplo las funciones declaradas en el archivo
llamamos. A esta operaci´n se la llama enlazar.
                           o                         de cabecera gmp.h est´n definidas en el archivo
                                                                            a
Cuando el c´digo de las funciones de bibliote-
             o                                       libgmp.a ´ libgmp.so. Cuando esto no sucede
                                                                o
ca se incorpora al programa ejecutable decimos       as´ es necesario consultar la documentaci´n de
                                                       ı,                                        o
que en enlace es est´tico. Por el contrario cuan-
                    a                                la implementaci´n de la biblioteca en cuesti´n
                                                                      o                              o
do lo que se coloca en el programa ejecutable es     en nuestro sistema.
el c´digo necesario para ejecutar el c´digo de la
     o                                o
funci´n que residir´ en una biblioteca de enlace
       o           a                                 3.1.3.   No se encuentra un archivo de bi-
din´mico.
    a                                                         blioteca
   De un modo u otro, cuando el linker termina
su tarea obtendremos un archivo que conten-             Como en el caso de los archivos de cabecera
dr´ un programa ejecutable. Estos archivos no
   a                                                 cuando el enlazador no encuentra el archivo de
suelen tener extensi´n en los sistemas Unix y
                     o                               biblioteca emite un mensaje de error como el
tienen la extensi´n .EXE en los sistemas opera-
                 o                                   siguiente:
tivos de Microsoft.                                  /usr/bin/ld: cannot find -lblas
                                                       Con ello nos indica que no encuentra el archi-
3.1.     Problemas que pueden pre- vo libblas.a. Igual que en el caso de los archi-
         sentarse al enlazar el progra- vos de cabecera, el hecho de que el enlazador no
         ma                             encuentre el archivo puede deberse a que efecti-
                                                     vamente no est´ instalado (aunque en este caso
                                                                     e
3.1.1.    Archivos de biblioteca                     es m´s dif´ porque lo normal es que se haya
                                                          a     ıcil
                                                     instalado junto con el archivo de cabecera) o a
   Los archivos de biblioteca son aquellos en los    que est´ en un directorio que el enlazador no en-
                                                            e
que se almacena el c´digo ejecutable de las fun-
                     o                               cuentra. En el primer caso la soluci´n consistir´
                                                                                          o           a
ciones que componen la misma. En los sistemas        en averiguar si la instalaci´n de la biblioteca es
                                                                                 o
Linux tienen las extensiones .o ´ .a cuando
                                    o                defectuosa.
se trata de bibliotecas est´ticas y la extensi´n
                            a                 o        En el segundo caso la soluci´n consiste en
                                                                                       o
.so (normalmente acompa˜ada de un n´mero
                             n            u          indicar al enlazador el directorio en el que se
de versi´n) cuando es una biblioteca de enlace
        o                                            encuentra el archivo mediante la opci´n -L.o
din´mico. En los sistemas Windows las bibliote-
    a                                                Por ejemplo si se encuentra en /usr/local/lib
cas de enlace din´mico tienen la extensi´n .dll
                 a                      o            agregar´ıamos este directorio al comando que
y las de enlace est´tico la extensi´n .lib.
                   a               o                 lanza la compilaci´n del programa.
                                                                        o
www.xcingenieria.com                                   ´
                                                                          Pagina:       7 de 10
 T´
  ıtulo:           Compilar un programa. . . .                            Fecha:        27 de julio de 2012
 Apartado:         7 CONCLUSION ´                                               ´
                                                                          Revision:     0


gcc -lblas -L/usr/local/lib                                  5.1.    Empleo de CMake
  blas_example.c
                                                                Cuando se emplea este sistema para compilar
  Como ocurr´ con los archivos de cabecera,
             ıa                                              el programa los requerimientos del mismo en lo
cuando se emplean sistemas de compilaci´n in-
                                       o                     que ser refiere a las bibliotecas que emplea y
tegrados como CMake o autoconf, el procedi-                  otros detalles se especifican en un archivo de-
miento a emplear es distinto.                                nominado CMakeLists.txt. Con el contenido
                                                             de este archivo el programa cmake genera el ar-
                                                             chivo makefile (ver apartado 4) con todas las
4.     La herramienta «Make»                                 opciones -I y -L necesarias.
                                                                Naturalmente el makefile generado es tan
   La herramienta «make» es una utilidad de                  bueno como lo sea la especificaci´n que haga
                                                                                                o
uso com´ n, sobre todo en entornos Unix, que
         u                                                   el desarrollador en CMakeLists.txt. El olvido
sirve para automatizar la generaci´n de progra-
                                    o                        de alguna biblioteca necesaria para compilar el
mas ejecutables y bibliotecas a partir del c´digo
                                            o                programa dar´ lugar al correspondiente error.
                                                                           a
fuente. A tal fin se escribe un archivo denomina-             Llegados a este punto cabe modificar el archivo
do «makefile» en el que se especifican las reglas              CMakeLists.txt para subsanar el error si se
a seguir para obtener el c´digo fuente. Como
                             o                               tienen conocimientos para hacerlo ´ indicar al
                                                                                                  o
ejemplo mostramos aqu´ el archivo makefile
                          ı                                  desarrollador el mensaje de error obtenido para
que se emplear´ para automatizar las tareas
                ıa                                           que pueda corregirlo.
que se describieron en el apartado 2.1:
a l l : hola                                                 5.2.    Autoconf
                                                  Como en el caso anterior este programa gene-
hola : hola . o bibHola
                                               ra un archivo makefile a partir de una macro
            g++ h o l a . c c b i b H o l a . o −o h o l a
bi b Ho la : b i b H o l a . o                 denominada configure que es la encargada de
            g++ −c bi b Ho l a . c c           recopilar la informaci´n acerca de la ubicaci´n
                                                                      o                     o
clean :                                        de las bibliotecas y archivos de cabecera en el
            rm −f h o l a h o l a . o b i b H ola . o
                                               sistema.
                                                  En caso de error el procedimiento a seguir es
   En la referencia [4] se puede encontrar m´s el descrito en el apartado anterior.
                                            a
informaci´n sobre esta herramienta.
          o

                                                             6.     Las   instrucciones                   de
5.     Sistemas de compilaci´no
                                                                    compilaci´n
                                                                             o
       integrados (CMake,. . . )
                                                               Generalmente el c´digo fuente de un progra-
                                                                                 o
   Los sistemas de compilaci´n integrados como
                              o                              ma viene acompa˜ado de un archivo de nombre
                                                                              n
«automake» o «CMake» suponen un paso m´s       a             similar install.txt o readme.txt en el que se
(respecto a make) en la automatizaci´n de la
                                         o                   indican, m´s o menos minuciosamente, los pa-
                                                                        a
generaci´n del programa. Su finalidad princi-
          o                                                  sos a seguir para compilar el programa.
pal evitar los problemas descritos acerca de la                Una vez conocida, siquiera de forma some-
ubicaci´n de los archivos de cabecera y de bi-
        o                                                    ra, la forma en que se compila un programa
blioteca. Para ello est´n dotados de una serie de
                       a                                     en ambiente Unix resultar´ m´s sencillo inter-
                                                                                        a a
rutinas mediante las que se determina la ubica-              pretar correctamente esas instrucciones y averi-
ci´n de estos archivos en el sistema y se generan
  o                                                          guar c´mo corregir los fallos m´s simples cuan-
                                                                    o                       a
los comandos de compilaci´n adecuados para el
                            o                                do estos se produzcan.
programa en el sistema de que se trate.
   La ventaja de estos programas es que permi-
ten al desarrollador abstraerse de las particula-            7.     Conclusi´n
                                                                            o
ridades de los distintos sistemas operativos. Su
principal desventaja es que a˜aden una capa
                                 n                              Con la informaci´n que se proporciona en
                                                                                  o
m´s al proceso oscureci´ndolo un poco.
  a                      e                                   el presente art´
                                                                            ıculo se pretende facilitar el uso
www.xcingenieria.com                ´
                                                    Pagina:     8 de 10
 T´
  ıtulo:        Compilar un programa. . . .         Fecha:      27 de julio de 2012
 Apartado:      7 CONCLUSION ´                            ´
                                                    Revision:   0


de software libre distribuido en forma de c´di-
                                             o
go fuente a personas cuyos conocimientos sobre
programaci´n son escasos.
             o
   Si adem´s sirve para que alguna de esas per-
            a
sonas se anime a colaborar en proyectos de soft-
ware libre o a iniciar el suyo propio el objetivo
estar´ sobradamente cumplido.
      a
   Si alguien desea hacer alg´n comentario o su-
                             u
gerencia puede escribirme a la direcci´n:
                                       o
l.perez@xcingenieria.com.
www.xcingenieria.com                               ´
                                                                   Pagina:       9 de 10
 T´
  ıtulo:        Compilar un programa. . . .                        Fecha:        27 de julio de 2012
 Apartado:      REFERENCIAS                                              ´
                                                                   Revision:     0




Figura 1: Lenguaje de m´quina del Intel 8088. El c´digo de m´quina en hexadecimal se resalta
                          a                        o          a
en rojo, el equivalente en lenguaje ensamblador en magenta, y las direcciones de memoria donde
se encuentra el c´digo, en azul. Abajo se ve un texto en hexadecimal y ASCII (tomada de la
                  o
referencia [1]).




                Figura 2: Dependencias del c´digo de un programa de ordenador.
                                            o


Referencias
 [1] Colaboradores    de    Wikipedia.   Compilador    [en   l´
                                                              ınea]. Wikipedia, La enciclo-
     pedia libre, 2012 [fecha de consulta: 3 de abril del 2012]. Disponible en
     <http://es.wikipedia.org/w/index.php?title=Compilador>.

 [2] Colaboradores de Wikipedia. Pila (inform´tica) [en l´
                                                      a              ınea]. Wikipedia, La en-
     ciclopedia libre, 2012 [fecha de consulta: 3 de abril del 2012]. Disponible en
     <http://es.wikipedia.org/w/index.php?title=Pila (inform´tica)>.
                                                            a

 [3] Conceptos de Inform´tica. P. Bishop. Editorial Anaya 1990.
                        a

 [4] Colaboradores de Wikipedia. Make [en l´     ınea]. Wikipedia, La enciclopedia libre, 2012 [fecha de
     consulta: 4 de abril del 2012]. Disponible en <http://es.wikipedia.org/w/index.php?title=Make>.
www.xcingenieria.com                          ´
                                                          Pagina:      10 de 10
T´
 ıtulo:     Compilar un programa. . . .                   Fecha:       27 de julio de 2012
Apartado:   REFERENCIAS                                         ´
                                                          Revision:    0




             Cuadro 2: Algunas funciones de la biblioteca est´ndar de C.
                                                             a




   Sistema        Ubicaci´n
                          o
   Windows        C:Program FilesMicrosoft SDKsWindowsv7.0AIncludeglgl.h
   Debian Linux   /usr/include/GL/gl.h
   Mac OS X       /usr/include/OpenGL/gl.h
   Solaris        /usr/X11/include/GL/gl.h
   HP-UX          /opt/graphics/OpenGL/include/GL/gl.h


        Cuadro 3: Ubicaciones del archivo gl.h en distintos sistemas operativos.

Weitere ähnliche Inhalte

Andere mochten auch

A Multidimensional Classification of 55 Enterprise Architecture Frameworks
A Multidimensional Classification of 55 Enterprise Architecture FrameworksA Multidimensional Classification of 55 Enterprise Architecture Frameworks
A Multidimensional Classification of 55 Enterprise Architecture FrameworksCapgemini
 
3 d pie chart circular with hole in center 11 stages powerpoint diagrams and ...
3 d pie chart circular with hole in center 11 stages powerpoint diagrams and ...3 d pie chart circular with hole in center 11 stages powerpoint diagrams and ...
3 d pie chart circular with hole in center 11 stages powerpoint diagrams and ...SlideTeam.net
 
Boosting Productivity through Successful Engaging SharePoint Portals by Joel ...
Boosting Productivity through Successful Engaging SharePoint Portals by Joel ...Boosting Productivity through Successful Engaging SharePoint Portals by Joel ...
Boosting Productivity through Successful Engaging SharePoint Portals by Joel ...Joel Oleson
 
Guia de estudio - sist. de igualacion , sustitucion y reduccion
Guia de estudio - sist. de igualacion , sustitucion y reduccionGuia de estudio - sist. de igualacion , sustitucion y reduccion
Guia de estudio - sist. de igualacion , sustitucion y reduccioncristianacuna
 
PubCon 2016 Jordan Koene
PubCon 2016 Jordan KoenePubCon 2016 Jordan Koene
PubCon 2016 Jordan Koenejtkoene
 
Broadening the Scope of Nanopublications
Broadening the Scope of NanopublicationsBroadening the Scope of Nanopublications
Broadening the Scope of NanopublicationsTobias Kuhn
 
Community Food Assessment: A Piece by Piece Approach
Community Food Assessment: A Piece by Piece ApproachCommunity Food Assessment: A Piece by Piece Approach
Community Food Assessment: A Piece by Piece Approachesheehancastro
 

Andere mochten auch (10)

A Multidimensional Classification of 55 Enterprise Architecture Frameworks
A Multidimensional Classification of 55 Enterprise Architecture FrameworksA Multidimensional Classification of 55 Enterprise Architecture Frameworks
A Multidimensional Classification of 55 Enterprise Architecture Frameworks
 
resume
resumeresume
resume
 
thank"s
thank"sthank"s
thank"s
 
3 d pie chart circular with hole in center 11 stages powerpoint diagrams and ...
3 d pie chart circular with hole in center 11 stages powerpoint diagrams and ...3 d pie chart circular with hole in center 11 stages powerpoint diagrams and ...
3 d pie chart circular with hole in center 11 stages powerpoint diagrams and ...
 
Boosting Productivity through Successful Engaging SharePoint Portals by Joel ...
Boosting Productivity through Successful Engaging SharePoint Portals by Joel ...Boosting Productivity through Successful Engaging SharePoint Portals by Joel ...
Boosting Productivity through Successful Engaging SharePoint Portals by Joel ...
 
Caitlin Woltje Resume
Caitlin Woltje ResumeCaitlin Woltje Resume
Caitlin Woltje Resume
 
Guia de estudio - sist. de igualacion , sustitucion y reduccion
Guia de estudio - sist. de igualacion , sustitucion y reduccionGuia de estudio - sist. de igualacion , sustitucion y reduccion
Guia de estudio - sist. de igualacion , sustitucion y reduccion
 
PubCon 2016 Jordan Koene
PubCon 2016 Jordan KoenePubCon 2016 Jordan Koene
PubCon 2016 Jordan Koene
 
Broadening the Scope of Nanopublications
Broadening the Scope of NanopublicationsBroadening the Scope of Nanopublications
Broadening the Scope of Nanopublications
 
Community Food Assessment: A Piece by Piece Approach
Community Food Assessment: A Piece by Piece ApproachCommunity Food Assessment: A Piece by Piece Approach
Community Food Assessment: A Piece by Piece Approach
 

Ähnlich wie Introducción a la compilación en ambientes Unix.

Administración avanzada del sistema operativo gnu linux módulo1_el núcleo linux
Administración avanzada del sistema operativo gnu linux módulo1_el núcleo linuxAdministración avanzada del sistema operativo gnu linux módulo1_el núcleo linux
Administración avanzada del sistema operativo gnu linux módulo1_el núcleo linuxMiguel Angel
 
Proyecto de compiladores_unl
Proyecto de compiladores_unlProyecto de compiladores_unl
Proyecto de compiladores_unlYandry Ramírez S
 
Practica software hardware
Practica software hardwarePractica software hardware
Practica software hardwaredeya9606
 
Dentro nucleo linux
Dentro nucleo linuxDentro nucleo linux
Dentro nucleo linux1 2d
 
PASOS PARA TRABAJAR CON UN PROGRAMA EN KEIL μVision
PASOS PARA TRABAJAR CON UN PROGRAMA EN KEIL μVisionPASOS PARA TRABAJAR CON UN PROGRAMA EN KEIL μVision
PASOS PARA TRABAJAR CON UN PROGRAMA EN KEIL μVisionRuderocker Billy
 
Manual Instalación JLex & CUP
Manual Instalación JLex & CUPManual Instalación JLex & CUP
Manual Instalación JLex & CUPrubeniii
 
Guia practica 1.0 2011
Guia practica 1.0  2011Guia practica 1.0  2011
Guia practica 1.0 2011puchichin666
 
Memoria Pruebas de intrusion mediante Metasploit Framework
Memoria Pruebas de intrusion mediante Metasploit FrameworkMemoria Pruebas de intrusion mediante Metasploit Framework
Memoria Pruebas de intrusion mediante Metasploit FrameworkErlaitzParreoMuoz
 
Pysafet workflow and json library documentation
Pysafet workflow and json library documentation Pysafet workflow and json library documentation
Pysafet workflow and json library documentation Víctor Bravo Bravo
 
Dionisio aburto ii parcial
Dionisio aburto ii parcialDionisio aburto ii parcial
Dionisio aburto ii parcialLeonardo Vargas
 
Instalacion Xen
Instalacion XenInstalacion Xen
Instalacion Xendlucenap
 
Categotias de sistemas operativo
Categotias de sistemas operativoCategotias de sistemas operativo
Categotias de sistemas operativojaviercollantes
 
Como compilar el kernel de Opensuse 42.3
Como compilar el kernel de Opensuse 42.3Como compilar el kernel de Opensuse 42.3
Como compilar el kernel de Opensuse 42.3luchohack123
 

Ähnlich wie Introducción a la compilación en ambientes Unix. (20)

Administración avanzada del sistema operativo gnu linux módulo1_el núcleo linux
Administración avanzada del sistema operativo gnu linux módulo1_el núcleo linuxAdministración avanzada del sistema operativo gnu linux módulo1_el núcleo linux
Administración avanzada del sistema operativo gnu linux módulo1_el núcleo linux
 
El Núcleo de Linux
El Núcleo de LinuxEl Núcleo de Linux
El Núcleo de Linux
 
Proyecto de compiladores_unl
Proyecto de compiladores_unlProyecto de compiladores_unl
Proyecto de compiladores_unl
 
Practica software hardware
Practica software hardwarePractica software hardware
Practica software hardware
 
Dentro nucleo linux
Dentro nucleo linuxDentro nucleo linux
Dentro nucleo linux
 
Actividad 6
Actividad 6Actividad 6
Actividad 6
 
Admin Manual
Admin ManualAdmin Manual
Admin Manual
 
PASOS PARA TRABAJAR CON UN PROGRAMA EN KEIL μVision
PASOS PARA TRABAJAR CON UN PROGRAMA EN KEIL μVisionPASOS PARA TRABAJAR CON UN PROGRAMA EN KEIL μVision
PASOS PARA TRABAJAR CON UN PROGRAMA EN KEIL μVision
 
Manual Instalación JLex & CUP
Manual Instalación JLex & CUPManual Instalación JLex & CUP
Manual Instalación JLex & CUP
 
Guia practica 1.0 2011
Guia practica 1.0  2011Guia practica 1.0  2011
Guia practica 1.0 2011
 
Kernel o núcleo
Kernel o núcleoKernel o núcleo
Kernel o núcleo
 
Memoria Pruebas de intrusion mediante Metasploit Framework
Memoria Pruebas de intrusion mediante Metasploit FrameworkMemoria Pruebas de intrusion mediante Metasploit Framework
Memoria Pruebas de intrusion mediante Metasploit Framework
 
Pysafet workflow and json library documentation
Pysafet workflow and json library documentation Pysafet workflow and json library documentation
Pysafet workflow and json library documentation
 
Dionisio aburto ii parcial
Dionisio aburto ii parcialDionisio aburto ii parcial
Dionisio aburto ii parcial
 
Instalacion Xen
Instalacion XenInstalacion Xen
Instalacion Xen
 
Categotias de sistemas operativo
Categotias de sistemas operativoCategotias de sistemas operativo
Categotias de sistemas operativo
 
Como compilar el kernel de Opensuse 42.3
Como compilar el kernel de Opensuse 42.3Como compilar el kernel de Opensuse 42.3
Como compilar el kernel de Opensuse 42.3
 
Dev c++
Dev c++Dev c++
Dev c++
 
ATIX07
ATIX07ATIX07
ATIX07
 
ATIX07
ATIX07ATIX07
ATIX07
 

Mehr von Luis Claudio Pérez Tato

Mehr von Luis Claudio Pérez Tato (9)

Analysis of a building with XC
Analysis of a building with XCAnalysis of a building with XC
Analysis of a building with XC
 
Implementation of a tension-stiffening model for the cracking nonlinear analy...
Implementation of a tension-stiffening model for the cracking nonlinear analy...Implementation of a tension-stiffening model for the cracking nonlinear analy...
Implementation of a tension-stiffening model for the cracking nonlinear analy...
 
Aplicaciones xc proy
Aplicaciones xc proyAplicaciones xc proy
Aplicaciones xc proy
 
Diseño estructural de mástiles y torres.
Diseño estructural de mástiles y torres.Diseño estructural de mástiles y torres.
Diseño estructural de mástiles y torres.
 
Combinación de acciones
Combinación de accionesCombinación de acciones
Combinación de acciones
 
El sismo y sus espectros.
El sismo y sus espectros.El sismo y sus espectros.
El sismo y sus espectros.
 
Clasificación de secciones de acero estructural
Clasificación de secciones de acero estructuralClasificación de secciones de acero estructural
Clasificación de secciones de acero estructural
 
Cálculo de uniones metálicas mediante el MEF.
Cálculo de uniones metálicas mediante el MEF.Cálculo de uniones metálicas mediante el MEF.
Cálculo de uniones metálicas mediante el MEF.
 
Software libre en la oficina técnica.
Software libre en la oficina técnica.Software libre en la oficina técnica.
Software libre en la oficina técnica.
 

Kürzlich hochgeladen

Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 

Kürzlich hochgeladen (20)

Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 

Introducción a la compilación en ambientes Unix.

  • 1. Introducci´n a la compilaci´n en ambiente Unix o o Luis C. P´rez Tato e 27 de julio de 2012 ´ Indice 1. Introducci´n o Este art´ıculo se redacta pensando en aque- 1. Introducci´n o 1 llas personas que tienen conocimientos de in- 1.1. ¿Porqu´ tengo que compilar el e form´tica a nivel de usuario y desean aprender a programa? . . . . . . . . . . . . . 1 a compilar e instalar programas que se distri- buyen en forma de c´digo fuente. En particular o 2. Compilaci´n o 2 se pretende facilitar la instalaci´n del programa o 2.1. Estructura del c´digo fuente . . . o 2 Xc1 . 2.2. Bibliotecas de funciones . . . . . 3 Con ese fin se introducen algunos conceptos 2.2.1. Ejemplo de funci´n de bi- o b´sicos acerca de la generaci´n de c´digo eje- a o o blioteca . . . . . . . . . . 4 cutable para, posteriormente, explicar c´mo se o 2.3. Problemas que pueden presen- resuelven los problemas m´s frecuentes a la ho- a tarse al compilar el programa . . 4 ra de compilar un programa en un ambiente 2.3.1. Archivos de cabecera . . . 4 ligeramente diferente al de la m´quina en que a 2.3.2. No se encuentra un archi- se cre´. o vo de cabecera . . . . . . 5 Aunque frecuentemente se emplea la palabra 3. Enlace 6 compilar para referirse a la obtenci´n de un o 3.1. Problemas que pueden presen- programa ejecutable a partir del c´digo fuente o tarse al enlazar el programa . . . 6 del mismo, en realidad dicho proceso requiere 3.1.1. Archivos de biblioteca . . 6 realizar dos operaciones: compilaci´n y enlace. o 3.1.2. No se encuentra la defini- M´s adelante se explica brevemente en qu´ con- a e ci´n de una funci´n . . . o o 6 sisten estas operaciones. 3.1.3. No se encuentra un archi- En las p´ginas siguientes se intentar´ trans- a a vo de biblioteca . . . . . . 6 mitir al lector los conocimientos b´sicos necesa- a rios que le permitan iniciarse en el uso de pro- 4. La herramienta «Make» 7 gramas distribuidos en forma de c´digo fuente. o 5. Sistemas de compilaci´n integra- o dos (CMake,. . . ) 7 1.1. ¿Porqu´ tengo que compilar e 5.1. Empleo de CMake . . . . . . . . 7 el programa? 5.2. Autoconf . . . . . . . . . . . . . 7 Puede que uno se pregunte acerca de la nece- sidad de compilar el programa en lugar de em- 6. Las instrucciones de compilaci´n o 7 plear un c´modo programa de instalaci´n que o o 7. Conclusi´n o 7 oculte al usuario la complejidad del proceso de generar c´digo ejecutable para una m´quina de- o a terminada. Cuando un programa est´ dise˜ado para eje- a n cutarse en un s´lo sistema operativo que co- o 1 Xc es un programa de an´lisis de estructuras me- a diante elementos finitos de c´digo abierto o 1
  • 2. www.xcingenieria.com ´ Pagina: 2 de 10 T´ ıtulo: Compilar un programa. . . . Fecha: 27 de julio de 2012 Apartado: 2 COMPILACION ´ ´ Revision: 0 rre sobre un s´lo tipo de m´quina (por ejemplo o a 2. Compilaci´n o OS X y Mac) es relativamente sencillo generar un ejecutable v´lido para dichas m´quinas y un a a Compilar, en nuestro contexto, consiste en programa de instalaci´n que se encargue de co- o «traducir» el c´digo fuente escrito en un len- o locar el archivo ejecutable y otros archivos que guaje de alto nivel (C, C++, Fortran,. . . ) a una sean necesarios para la ejecuci´n, en los lugares o secuencia de instrucciones directamente inter- adecuados. pretable por el procesador (Intel, Sparc, Moto- Sin embargo, si lo que se pretende es que el rola,. . . ) (lenguaje de m´quina). a programa se pueda instalar en una familia de Para hacerse una idea de qu´ aspecto tiene el e m´quinas tan amplia como sea posible la solu- a lenguaje de m´quina puede examinarse la figura a ci´n anterior no resulta tan sencilla de aplicar. o 1. El problema radica en la variedad de arquitec- turas para las que hay que resolver la instala- ci´n. Por ejemplo considerando s´lo las arqui- o o 2.1. Estructura del c´digo fuente o tecturas de hardware m´s populares tendremos: a El c´digo fuente de un programa estar´ for- o a mado por el del programa principal y las bi- Intel IA-32. bliotecas de funciones que acompa˜an a ´ste. n e Para dar una idea de en qu´ consiste esto en e Intel IA-64. los p´rrafos siguientes se desarrolla un ejemplo a que, aun siendo trivial, contiene los elementos AMD64. b´sicos que forman el problema. Por otra parte a en la figura 2 se intentan representar las relacio- Por otra parte sobre esa arquitectura podr´ ıa- nes de dependencia del programa con el sistema mos encontrar distintas distribuciones de Linux operativo y el hardware en el que se pretende (Ubuntu, Linux Mint, Debian, Red Hat, Suse, ejecutar. Fedora,. . . ) u otros sistemas de similares carac- Supongamos que tenemos un archivo de nom- ter´ısticas HP-UX, IBM-AIX, Solaris, etc´tera. bre hola.cc con el siguiente contenido: e El coste de elaborar soluciones para la ins- talaci´n, aunque s´lo fuera para unas pocas de #include <i o s t r e a m > o o i n t main ( ) entre las combinaciones posibles, es muy gran- { de2 . s t d : : c o u t << ”Hola a t o d o s . ” Si en lugar de ello lo que se hace es distri- << s t d : : e n d l ; buir el c´digo fuente y dejar al usuario la tarea o return 0 ; de compilarlo el problema se simplifica bastan- } te y la tarea que se traslada al usuario no es demasiado complicada en la mayor parte de los como el nombre del archivo lleva la extensi´n o casos 3 «cc» suponemos que se trata de un programa Como puede ver el argumento es muy similar escrito en C++ (si estuviera escrito en FOR- a los que emplea una conocida cadena de dis- TRAN deber´ llevar la extensi´n «for», en ıa o tribuci´n de muebles para justificar que sea el o Python la extensi´n «py»,. . . ). Por otra par- o cliente el que tenga que transportarlos hasta su te como en el programa se define la funci´n o casa y montarlos. «main» sabemos que el archivo corresponde al programa principal ya que en C++ (y en C) la 2 Las distintas distribuciones de Linux resuelven es- funci´n que se ejecuta al lanzar la ejecuci´n del o o te problema empleando a personas (los denominados programa es precisamente ´sta. e «package maintainers») que se dedican a adaptar un Si examinamos la primera l´ ınea del c´digo en o programa determinado (como por ejemplo Gimp www. gimp.org) a la distribuci´n en cuesti´n. o o la que se lee #include <iostream> deducimos 3 La tarea ser´ tanto m´s complicada cuanto m´s di- a a a que el programa emplea el archivo de cabece- ferente sea la m´quina en la que se pretende compilar ra denominado «iostream» y, con un poco de a el programa de aquella en la que se cre´ el mismo. Por o esfuerzo se puede averiguar (aunque en general ejemplo si se intenta compilar un programa dise˜ ado n para Unix en una m´quina Windows el dolor de cabeza no ser´ necesario) que en un sistema Debian Li- a a est´ pr´cticamente garantizado. a a nux versi´n 6 esto implica usar la biblioteca de o
  • 3. www.xcingenieria.com ´ Pagina: 3 de 10 T´ ıtulo: Compilar un programa. . . . Fecha: 27 de julio de 2012 Apartado: 2 COMPILACION ´ ´ Revision: 0 funciones «LibCXX 3.4» que forma parte del Ahora el proceso para generar el ejecutable sistema operativo. un poco m´s complicado. Primero deberemos a As´ que el programa hola.cc est´ formado ı a compilar la biblioteca de funciones. Para ello por un unico archivo y (en mi sistema) s´lo usa ´ o teclear´ ıamos: la biblioteca de funciones LibCXX versi´n 3.4. o Si el lector usa alguna variante de Unix y quiere g++ -c bibHola.cc -o bibHola.o compilar este programa, con el compilador de GNU, puede hacerlo mediante: y a continuaci´n generaremos el ejecutable me- o diante: g++ hola.cc -o hola Para ilustrar el caso general, en el que el pro- g++ bibHola.o hola.cc -o hola grama a compilar emplea bibliotecas de fun- ciones cuyo c´digo fuente se suministra con el o El ejemplo descrito hasta aqu´ a pesar de su ı, mismo, escribiremos el archivo bibHola.h que simplicidad, ilustra las principales tareas que contendr´ lo siguiente: a deben realizarse para compilar cualquier pro- grama. En los apartados siguientes se desarro- // b i b H o l a . h llan un poco m´s algunos aspectos de lo tratado a #i f n d e f BIBHOLA H aqu´ de forma tan superficial. ı #define BIBHOLA H 2.2. Bibliotecas de funciones #include <s t r i n g > Un microprocesador es capaz, por s´ solo, de ı void p r i n t m s g ( const s t d : : s t r i n g &msg ) ;ejecutar instrucciones sencillas como la suma, resta y producto de n´meros. Tambi´n existen u e #endif microprocesadores que incorporan rutinas pa- Este ser´ el archivo de cabecera de nuestra a ra procesar operaciones no tan sencillas como biblioteca en el que se declara una sola funci´n o evaluar funciones trigonom´tricas4 , logaritmos, e a la que hemos llamado pring_msg. etc´tera. e La implementaci´n de la funci´n la escri- o o El resto de las operaciones que realiza un pro- biremos en un archivo al que llamaremos grama (mostrar texto y figuras en un monitor, bibHola.cc y aqu´ definiremos lo que hace la ı leer y escribir en discos duros, memorias USB funci´n: o y perif´ricos de todo tipo,. . . ) se realizan con el e // b i b H o l a . cc auxilio de lo que llamamos funciones de biblio- teca. Ese es el motivo de que cuando se adquiere #include ”b i b Ho l a . h ” un elemento de hardware nuevo (tarjeta de v´ ı- #include <i o s t r e a m > deo, esc´ner,. . . ) venga acompa˜ado de un dis- a n co con sus «drivers», es decir, con las funciones void p r i n t m s g ( const s t d : : s t r i n g &msg ) de biblioteca que permitir´n al sistema opera- a { tivo de la m´quina y a otras aplicaciones mane- a s t d : : c o u t << msg << s t d : : e n d l ; jar el dispositivo (mostrar gr´ficos 3D, escanear a } documentos,. . . ). Por ultimo modificaremos el contenido del ar- ´ Estas funciones de biblioteca no son m´s que a chivo hola.cc como sigue: secuencias de instrucciones b´sicas que sirven a #include ”b i b Ho l a . h ” para facilitar la ejecuci´n de una operaci´n re- o o in t main ( void ) lativamente compleja (por ejemplo calcular el { determinante de una matriz), o acceder a de- p r i n t m s g ( ”Hola a t o d o s . ” ) ; terminada caracter´ ıstica de determinado hard- return 0 ; ware (por ejemplo borrar lo que se muestra en } pantalla). Ahora el programa principal usa la funci´n o 4A los usuarios m´s veteranos de ordenadores de ti- a pring_msg de nuestra raqu´ıtica biblioteca de po PC les resultar´ familiar el t´rmino «coprocesador a e funciones «bibHola». matem´tico» que populariz´ Intel en los a˜os 80. a o n
  • 4. www.xcingenieria.com ´ Pagina: 4 de 10 T´ ıtulo: Compilar un programa. . . . Fecha: 27 de julio de 2012 Apartado: 2 COMPILACION ´ ´ Revision: 0 2.2.1. Ejemplo de funci´n de biblioteca o OS, y .obj en los sistemas operativos de Mi- crosoft7 . Para dar una idea un poco m´s aproximada a de lo que se intenta describir en este apartado pondremos un ejemplo trivial. 2.3. Problemas que pueden pre- Supongamos una funci´n que se encarga de o sentarse al compilar el pro- cambiar el color de un p´ en la pantalla. Es- ıxel grama ta funci´n podr´ recibir como argumentos las o ıa En lo que sigue se supone que tratamos de coordenadas x e y del p´ ıxel en cuesti´n y los o 5 compilar un programa que se cre´ y prob´ con o o valores RGB . Su declaraci´n en C++ ser´ se- o ıa ´xito en otra m´quina y por tanto est´ libre e a a mejante a esta: de errores sint´cticos. Dicho de otro modo, los a in t c o l o r p i x e l ( in t x , i n t y , f l o a t r problemas de los que se hablar´ aqu´ son los a ı , float g , float b ) ; debidos a las diferencias que pueden existir en- Cuando el compilador se encuentra con una tre la m´quina en la que pretendemos compilar a llamada a esta funci´n como, por ejemplo, la o el programa y aquella en la que se desarroll´ y o siguiente: prob´ el mismo. o ok= c o l o r p i x e l ( 4 0 0 , 3 0 0 , 2.3.1. Archivos de cabecera 0 . 5 , 0 . 5 , 0 . 5 ) ; // g r i s . Para que el compilador pueda generar el c´-o generar´ las instrucciones del microprocesador digo que servir´ para llamar a las funciones de a a que sirvan para: biblioteca necesita conocer: 1. Colocar en la pila6 los cinco valores que El nombre de la funci´n a llamar. o emplear´ la funci´n, en este caso: 400, 300, a o 0.5, 0.5, 0.5. El n´mero de argumentos que recibir´ la u a funci´n y su orden. o 2. Colocar a continuaci´n la llamada a la fun- o El tipo de cada uno de los argumentos ci´n. Esto har´ que, cuando se ejecute el o a (entero, coma flotante, cadena de caracte- programa, el c´digo de dicha funci´n reco- o o res,. . . ). ja los cinco argumentos de la pila y ejecute, empleando esos valores, las instrucciones El tipo de valor que, en su caso, devuelve que sean necesarias (llamadas a la tarjeta la funci´n. o gr´fica,. . . ). a Para verificar que la llamada a la funci´n o 3. Generar el c´digo para, en su caso, alma- o puede hacerse correctamente el compilador ne- cenar el valor devuelto por la funci´n en o cesita acceder a la declaraci´n de la funci´n (en o o alguna variable cuyo nombre le habremos la que se definen los datos de la lista anterior). indicado. En este caso: ok. En C y C++ esto se resuelve empleando lo que se llama archivos de cabecera. Estos archivos Una vez que termina el proceso de compila- contienen la declaraci´n de las funciones y va- o ci´n tendremos, por cada uno de los archivos o riables de la biblioteca de funciones a la que fuente que hayamos compilado, un archivo ob- corresponden. jeto que contendr´ las instrucciones del progra- a Por ejemplo en el cuadro 1 puede verse la de- ma en c´digo m´quina con llamadas a funciones o a claraci´n de la funci´n getMemoryUsed que no o o de biblioteca intercaladas. Estos archivos suelen recibe argumentos y devuelve un entero largo tener la extensi´n .o en sistemas Unix y Mac o sin signo. Una llamada a esta funci´n dentro o 5 Estos valores son sencillamente las intensidades de del c´digo fuente podr´ ser: o ıa color rojo (red: R), verde (green: G) y azul (blue: B) 7 Como se ha dicho anteriormente, compilar bajo que definen el color a mostrar en el p´ıxel. Windows un programa desarrollado en Unix es una ta- 6 Los que sean usuarios de calculadoras HP con no- rea muy dif´ salvo que se trate de un programa ex- ıcil taci´n polaca inversa (RPN) ya saben lo que es una o tremadamente simple o el desarrollador previera dicha pila, los que no tengan esa suerte pueden consultar la posibilidad. En este documento se citan distintos siste- referencia [2]. mas operativos para que sea lo m´s general posible. a
  • 5. www.xcingenieria.com ´ Pagina: 5 de 10 T´ ıtulo: Compilar un programa. . . . Fecha: 27 de julio de 2012 Apartado: 2 COMPILACION ´ ´ Revision: 0 // memoria . h dicha biblioteca. Una vez instalada la biblio- teca OpenGL, este archivo puede encontrarse, #i f n d e f MEMORIA H dependiendo del sistema que usemos, en las ubi- #define MEMORIA H caciones que se dan en la tabla 3. El procedimiento que se emplea para indicar unsigned long getMemoryUsed ( void ) ; al compilador la ubicaci´n de los archivos de ca- o becera var´ de unos sistemas a otros. Por ejem- ıa #endif plo si estamos empleando el compilador GNU C++ se emplea la opci´n -I seguida del direc- o Cuadro 1: Ejemplo de archivo de cabecera (muy torio en el que se encuentran los archivos de peque˜o). n cabecera. En el caso de que estuvi´ramos em- e pleando este compilador en una m´quina HP- a UX usar´ ıamos: unsigned long memOcupada= 0 ; memOcupada= getMemoryUsed ( ) ; g++ -I/opt/graphics/OpenGL/include programa.cc Con ambas informaciones (la declaraci´n y o la llamada) el compilador puede establecer la Si adem´s necesit´ramos emplear otro archi- a a correspondencia entre los argumentos en la lla- vo de cabecera que estuviera en el directorio mada y en la declaraci´n. Tambi´n puede esta- o e /usr/local/include. blecer la correspondencia entre el valor devuelto por la funci´n y la variable a la que se asigna o g++ -I/opt/graphics/OpenGL/include (getMemoryUsed). -I/usr/local/include programa.cc Para poder hacer todo esto el compilador ne- cesita tener acceso al archivo de cabecera, es de- 2.3.2. No se encuentra un archivo de ca- cir conocer su ubicaci´n en el sistema de archi- o becera vos (por ejemplo /usr/include/math.h). Es- tos archivos se colocan en distintos directorios De lo anterior se deduce que cuando el com- dependiendo del sistema operativo que estemos pilador emite un mensaje de error como: usando y de la forma en que se haya instala- error: blas.h: No existe el do la biblioteca cuya interfaz8 definen (paquete fichero o el directorio binario, compilada por el usuario,. . . ). Aunque, como veremos m´s adelante, exis- a puede deberse a dos razones: ten herramientas para facilitar la soluci´n de o este problema, para que el compilador pueda 1. Realmente el archivo blas.h no est´ ins- a acceder a determinado archivo de cabecera es talado en el sistema. Para cerciorarnos de necesario asegurarse de que: ello en los sistemas Unix podemos usar el comando: 1. La versi´n de desarrollo 9 de la biblioteca o est´ instalada en el sistema. a locate blas.h 2. El compilador conoce la ubicaci´n del ar- o Si efectivamente el archivo no est´ instala- a chivo de cabecera. do probablemente se deba a que no se ha instalado la biblioteca a la que pertenece Veamos esto con un ejemplo. Supongamos el archivo. En sistemas Debian esto puede que queremos compilar un programa que hace averiguarse empleando el comando: uso de la biblioteca OpenGL y para ello llama a funciones declaradas en el archivo (gl.h) de apt-file search blas.h 8 El archivo de cabecera al definir el modo en que se Si en su sistema no dispone de una utilidad puede llamar a las distintas rutinas de la biblioteca a la que pertenece constituye su interfaz. similar puede utilizar b´squedas de Google u 9 La que proporciona los archivos de cabecera de la para inferir a qu´ biblioteca pertenece el e biblioteca. archivo.
  • 6. www.xcingenieria.com ´ Pagina: 6 de 10 T´ ıtulo: Compilar un programa. . . . Fecha: 27 de julio de 2012 Apartado: 3 ENLACE ´ Revision: 0 2. El archivo s´ est´ instalado pero el com- ı a 3.1.2. No se encuentra la definici´n de o pilador no puede localizarlo. En este caso una funci´n o el problema es que falta la opci´n -I que o Aunque el programa enlazara correctamente indica al compilador la ubicaci´n del ar- o en el sistema que se cre´ es posible que en nues- o chivo. Si se tiene acceso al comando que tro sistema la definici´n de alguna funci´n est´ o o e lanza la ejecuci´n del compilador bastar´ o a en un archivo de biblioteca distinto. En este ca- con a˜adir esta opci´n. Por el contrario si n o so el enlazador emitir´ un mensaje parecido al a se emplean medios m´s sofisticados para a el que sigue (el texto importante es el que reza compilar el programa como make, CMa- «undefined reference to»): ke o automake y no conocemos su funcio- namiento ser´ necesario contactar con el a blas_example.c:(.text+0xaf): undefined desarrollador para indicarle el problema. reference to ‘ddot_’ En general para localizar el archivo de biblio- teca en el que se define una funci´n comenza- o 3. Enlace remos por localizar el archivo de cabecera en el que se declara la funci´n. Localizado ´ste, es fre- o e Una vez que disponemos del c´digo objeto del o cuente que (en los sistemas Unix) el archivo que programa, para generar el c´digo ejecutable, se o contiene los binarios correspondientes tenga el deber´ colocar en el sitio adecuado el c´digo eje- a o mismo nombre precedido del prefijo lib. Por cutable de las funciones de biblioteca a las que ejemplo las funciones declaradas en el archivo llamamos. A esta operaci´n se la llama enlazar. o de cabecera gmp.h est´n definidas en el archivo a Cuando el c´digo de las funciones de bibliote- o libgmp.a ´ libgmp.so. Cuando esto no sucede o ca se incorpora al programa ejecutable decimos as´ es necesario consultar la documentaci´n de ı, o que en enlace es est´tico. Por el contrario cuan- a la implementaci´n de la biblioteca en cuesti´n o o do lo que se coloca en el programa ejecutable es en nuestro sistema. el c´digo necesario para ejecutar el c´digo de la o o funci´n que residir´ en una biblioteca de enlace o a 3.1.3. No se encuentra un archivo de bi- din´mico. a blioteca De un modo u otro, cuando el linker termina su tarea obtendremos un archivo que conten- Como en el caso de los archivos de cabecera dr´ un programa ejecutable. Estos archivos no a cuando el enlazador no encuentra el archivo de suelen tener extensi´n en los sistemas Unix y o biblioteca emite un mensaje de error como el tienen la extensi´n .EXE en los sistemas opera- o siguiente: tivos de Microsoft. /usr/bin/ld: cannot find -lblas Con ello nos indica que no encuentra el archi- 3.1. Problemas que pueden pre- vo libblas.a. Igual que en el caso de los archi- sentarse al enlazar el progra- vos de cabecera, el hecho de que el enlazador no ma encuentre el archivo puede deberse a que efecti- vamente no est´ instalado (aunque en este caso e 3.1.1. Archivos de biblioteca es m´s dif´ porque lo normal es que se haya a ıcil instalado junto con el archivo de cabecera) o a Los archivos de biblioteca son aquellos en los que est´ en un directorio que el enlazador no en- e que se almacena el c´digo ejecutable de las fun- o cuentra. En el primer caso la soluci´n consistir´ o a ciones que componen la misma. En los sistemas en averiguar si la instalaci´n de la biblioteca es o Linux tienen las extensiones .o ´ .a cuando o defectuosa. se trata de bibliotecas est´ticas y la extensi´n a o En el segundo caso la soluci´n consiste en o .so (normalmente acompa˜ada de un n´mero n u indicar al enlazador el directorio en el que se de versi´n) cuando es una biblioteca de enlace o encuentra el archivo mediante la opci´n -L.o din´mico. En los sistemas Windows las bibliote- a Por ejemplo si se encuentra en /usr/local/lib cas de enlace din´mico tienen la extensi´n .dll a o agregar´ıamos este directorio al comando que y las de enlace est´tico la extensi´n .lib. a o lanza la compilaci´n del programa. o
  • 7. www.xcingenieria.com ´ Pagina: 7 de 10 T´ ıtulo: Compilar un programa. . . . Fecha: 27 de julio de 2012 Apartado: 7 CONCLUSION ´ ´ Revision: 0 gcc -lblas -L/usr/local/lib 5.1. Empleo de CMake blas_example.c Cuando se emplea este sistema para compilar Como ocurr´ con los archivos de cabecera, ıa el programa los requerimientos del mismo en lo cuando se emplean sistemas de compilaci´n in- o que ser refiere a las bibliotecas que emplea y tegrados como CMake o autoconf, el procedi- otros detalles se especifican en un archivo de- miento a emplear es distinto. nominado CMakeLists.txt. Con el contenido de este archivo el programa cmake genera el ar- chivo makefile (ver apartado 4) con todas las 4. La herramienta «Make» opciones -I y -L necesarias. Naturalmente el makefile generado es tan La herramienta «make» es una utilidad de bueno como lo sea la especificaci´n que haga o uso com´ n, sobre todo en entornos Unix, que u el desarrollador en CMakeLists.txt. El olvido sirve para automatizar la generaci´n de progra- o de alguna biblioteca necesaria para compilar el mas ejecutables y bibliotecas a partir del c´digo o programa dar´ lugar al correspondiente error. a fuente. A tal fin se escribe un archivo denomina- Llegados a este punto cabe modificar el archivo do «makefile» en el que se especifican las reglas CMakeLists.txt para subsanar el error si se a seguir para obtener el c´digo fuente. Como o tienen conocimientos para hacerlo ´ indicar al o ejemplo mostramos aqu´ el archivo makefile ı desarrollador el mensaje de error obtenido para que se emplear´ para automatizar las tareas ıa que pueda corregirlo. que se describieron en el apartado 2.1: a l l : hola 5.2. Autoconf Como en el caso anterior este programa gene- hola : hola . o bibHola ra un archivo makefile a partir de una macro g++ h o l a . c c b i b H o l a . o −o h o l a bi b Ho la : b i b H o l a . o denominada configure que es la encargada de g++ −c bi b Ho l a . c c recopilar la informaci´n acerca de la ubicaci´n o o clean : de las bibliotecas y archivos de cabecera en el rm −f h o l a h o l a . o b i b H ola . o sistema. En caso de error el procedimiento a seguir es En la referencia [4] se puede encontrar m´s el descrito en el apartado anterior. a informaci´n sobre esta herramienta. o 6. Las instrucciones de 5. Sistemas de compilaci´no compilaci´n o integrados (CMake,. . . ) Generalmente el c´digo fuente de un progra- o Los sistemas de compilaci´n integrados como o ma viene acompa˜ado de un archivo de nombre n «automake» o «CMake» suponen un paso m´s a similar install.txt o readme.txt en el que se (respecto a make) en la automatizaci´n de la o indican, m´s o menos minuciosamente, los pa- a generaci´n del programa. Su finalidad princi- o sos a seguir para compilar el programa. pal evitar los problemas descritos acerca de la Una vez conocida, siquiera de forma some- ubicaci´n de los archivos de cabecera y de bi- o ra, la forma en que se compila un programa blioteca. Para ello est´n dotados de una serie de a en ambiente Unix resultar´ m´s sencillo inter- a a rutinas mediante las que se determina la ubica- pretar correctamente esas instrucciones y averi- ci´n de estos archivos en el sistema y se generan o guar c´mo corregir los fallos m´s simples cuan- o a los comandos de compilaci´n adecuados para el o do estos se produzcan. programa en el sistema de que se trate. La ventaja de estos programas es que permi- ten al desarrollador abstraerse de las particula- 7. Conclusi´n o ridades de los distintos sistemas operativos. Su principal desventaja es que a˜aden una capa n Con la informaci´n que se proporciona en o m´s al proceso oscureci´ndolo un poco. a e el presente art´ ıculo se pretende facilitar el uso
  • 8. www.xcingenieria.com ´ Pagina: 8 de 10 T´ ıtulo: Compilar un programa. . . . Fecha: 27 de julio de 2012 Apartado: 7 CONCLUSION ´ ´ Revision: 0 de software libre distribuido en forma de c´di- o go fuente a personas cuyos conocimientos sobre programaci´n son escasos. o Si adem´s sirve para que alguna de esas per- a sonas se anime a colaborar en proyectos de soft- ware libre o a iniciar el suyo propio el objetivo estar´ sobradamente cumplido. a Si alguien desea hacer alg´n comentario o su- u gerencia puede escribirme a la direcci´n: o l.perez@xcingenieria.com.
  • 9. www.xcingenieria.com ´ Pagina: 9 de 10 T´ ıtulo: Compilar un programa. . . . Fecha: 27 de julio de 2012 Apartado: REFERENCIAS ´ Revision: 0 Figura 1: Lenguaje de m´quina del Intel 8088. El c´digo de m´quina en hexadecimal se resalta a o a en rojo, el equivalente en lenguaje ensamblador en magenta, y las direcciones de memoria donde se encuentra el c´digo, en azul. Abajo se ve un texto en hexadecimal y ASCII (tomada de la o referencia [1]). Figura 2: Dependencias del c´digo de un programa de ordenador. o Referencias [1] Colaboradores de Wikipedia. Compilador [en l´ ınea]. Wikipedia, La enciclo- pedia libre, 2012 [fecha de consulta: 3 de abril del 2012]. Disponible en <http://es.wikipedia.org/w/index.php?title=Compilador>. [2] Colaboradores de Wikipedia. Pila (inform´tica) [en l´ a ınea]. Wikipedia, La en- ciclopedia libre, 2012 [fecha de consulta: 3 de abril del 2012]. Disponible en <http://es.wikipedia.org/w/index.php?title=Pila (inform´tica)>. a [3] Conceptos de Inform´tica. P. Bishop. Editorial Anaya 1990. a [4] Colaboradores de Wikipedia. Make [en l´ ınea]. Wikipedia, La enciclopedia libre, 2012 [fecha de consulta: 4 de abril del 2012]. Disponible en <http://es.wikipedia.org/w/index.php?title=Make>.
  • 10. www.xcingenieria.com ´ Pagina: 10 de 10 T´ ıtulo: Compilar un programa. . . . Fecha: 27 de julio de 2012 Apartado: REFERENCIAS ´ Revision: 0 Cuadro 2: Algunas funciones de la biblioteca est´ndar de C. a Sistema Ubicaci´n o Windows C:Program FilesMicrosoft SDKsWindowsv7.0AIncludeglgl.h Debian Linux /usr/include/GL/gl.h Mac OS X /usr/include/OpenGL/gl.h Solaris /usr/X11/include/GL/gl.h HP-UX /opt/graphics/OpenGL/include/GL/gl.h Cuadro 3: Ubicaciones del archivo gl.h en distintos sistemas operativos.