Creación y uso de una librería estática (.h) Imprimir
Escrito por adrianvaca   
Domingo, 20 de Marzo de 2011 19:03

Las librerías son un conjunto de funciones que usamos frecuentemente y que por lo general están agrupadas de acuerdo a su utilidad, por ejemplo la iostream tiene funciones para controlar la entrada y salida de datos.

En el presente artículo crearemos una librería estática (.h) y luego haremos un programa en el cual usemos esta librería, para ello vamos a usar el compilador Dev-C++ 4.9.9.2, si no lo tienes descárgalo primero de la sección Compiladores de este sitio.

Empecemos, como siempre paso a paso:

Creación de la librería

  1. Primero que nada crearemos una carpeta de nombre libUtilidades en C:\Dev-Cpp\bin en la cual iremos guardando todos los archivos del proyecto. Abrimos el Dev-C++ y vamos a Archivo -> Nuevo -> Proyecto, seleccionamos Static Library y el nombre del proyecto será libUtilidades tal como se muestra:



  2. Ahora agregamos un nuevo fichero, para esto vamos a Proyecto -> Nuevo Código Fuente, escribimos el siguiente código ahí y guardamos el archivo como utilidades.h:

    /* utilidades.h */

    int suma(int a, int b);
    int es_palindroma(char *cadena);


    Como podemos ver aquí definimos únicamente el prototipo o molde de las funciones a usar. La primera devolverá el resultado de la suma de 2 enteros y la segunda función devolverá 1 si la cadena ingresada como parámetro es palindroma ó 0 si no lo es.

    Si, anteriormente dije que una librería debe tener funciones agrupadas de acuerdo a su utilidad. En este caso estas funciones no tienen nada que ver una con la otra, pero sirve de ejemplo para comprender ciertas cosas.

    Otra cosa, en este fichero .h únicamente colocamos los prototipos de funciones que queramos hacer públicas, es decir que queramos que los usuarios vean y por lo tanto puedan usar.


  3. Ahora vamos a crear la implementación de las funciones anteriores, para esto esto vamos a Proyecto -> Nuevo Código Fuente, escribimos el siguiente código ahí y guardamos el archivo como utilidades.cpp:

    /* utilidades.cpp */

    #include <string>

    int suma(int a, int b)
    {
        return a + b;
    }

    int longitud(char *cadena)
    {
        int len = 0;
        for(int i=0; ; i++)
        {
            if(cadena[ i ] == '\0')
               break;
               
            len ++;
        }
        return len;
    }

    int es_palindroma(char *cadena)
    {
       int i;
       char invertida[50];

       /* Halla la cadena invertida */
       for(i=0; i < longitud(cadena); i++)
           invertida[ i ] = cadena[longitud(cadena)-i-1];

       /* Coloca caracter de fin de cadena */
       invertida[ i ] = '\0';

       /* Realiza la comparacion */
       if(!strcmp(cadena, invertida))
          return 1; /* es un palindromo */
             
       return 0;  /* no es un palindromo */
    }


    Podemos ver que están las implementaciones de las 2 funciones anteriores, pero además está la función longitud, como dije, esta función será privada es decir no podrá ser llamada directamente por el usuario que use la librería, ya que no incluímos su prototipo en el archivo .h. Esta función será de utilería y la usaremos en forma interna.


  4. Bien, ahora vamos a compilar la librería para ello, simplemete presionamos CTRL+F9 y podemos ver en la parte inferior de la ventana que se ha creado el fichero libUtilidades.a:



  5. Bien con esto ya hemos creado nuestra librería. Si vamos al Explorador de Windows a nuestra carpeta de trabajo, podemos ver que se han creado algunos ficheros, de todos estos, los que nos son útiles para poder usar la librería son: utilidades.h y libUtilidades.a, los demás ficheros tienen el fuente de la biblioteca. Si queremos distribuír nuestra librería sólo son necesarios los 2 ficheros anteriores


Uso de la librería

  1. En primer lugar copiamos el archivo utilidades.h al directorio include del compilador y el archivo libUtilidades.a al directorio lib


  2. Una vez hecha la librería, crearemos ahora un programa de prueba. Primero que nada crearemos una carpeta de nombre pruebaUtilidades en C:\Dev-Cpp\bin en la cual iremos guardando todos los archivos de este proyecto de prueba. Abrimos el Dev-C++ y vamos a Archivo -> Nuevo -> Proyecto, seleccionamos Console Application y el nombre del proyecto será pruebaUtilidades tal como se muestra:



    Reemplazamos el código inicial por el siguiente:

    #include <stdlib>
    #include <iostream>

    #include <utilidades.h>

    using namespace std;

    int main(int argc, char *argv[])
    {
        int a, b, resultado;
        char cadena[50];
        cout << "Ingrese a: ";
        cin >> a;
        cout << "Ingrese b: ";
        cin >> b;
        resultado = suma(a, b);
        cout << "Resultado a+b=" << resultado;   
       
        cout << "\nIngrese cadena: ";
        cin >> cadena;
        if(es_palindroma(cadena))
           cout << "Es palindroma\n";
        else
           cout << "NO es palindroma\n";
       
        system("PAUSE");
        return EXIT_SUCCESS;
    }


    En este punto hay que asegurarse primero de guardar todos los archivos. Podemos ver que usamos las 2 funciones públicas que creamos, si tratamos de usar la función longitud nos dará un error


  3. Podemos ver que incluímos nuestra librería utilidades.h y podemos usarla como si se tratar de una biblioteca normal. Pero hace falta un paso adicional antes de compilar nuestro programa. Aquí hay 2 opciones, la primera es hacer que nuestra biblioteca esté disponible sólo en el proyecto actual o esté disponible para cualquier proyecto:

    • Permitir que la biblioteca esté disponible sólo en el proyecto actual

      Para esto vamos a Proyecto -> Opciones del Proyecto -> Parámetros y en hacemos click en el botón Añadir Biblioteca u Objeto y seleccionamos el archivo libUtilidades.a que anteriormente copiamos en la carpeta lib, tendremos algo como lo que sigue:



    • Permitir que la biblioteca esté disponible para cualquier proyecto

      Para esto vamos a Herramientas -> Opciones del compilador, en la ficha Compilador activa la casilla Añadir estos comandos a la línea de comandos del linker y el cuadro que está debajo escribe -lutilidades, puedes fijarte en la siguiente pantalla:



  4. Ahora compilamos el programa, para esto presionamos CTRL+F9 y el resultado de la compilación es:



  5. Ahora ejecutamos el programa, para esto presionamos CTRL+F10 y el resultado es:



 
Otros artículos