El uso de librerías en C++ es sumamente importante, ya que permite ahorrar mucho tiempo mediante la reutilización de código que es utilizado recurrentemente.

Si bien existen librerías estáticas y dinámicas, en este artículo abordaremos la creación de librerías estáticas en C++, además de dos clasificaciones de éstas: Compiladas y abiertas (Open Source).

 

 

 

 

 

 

 


Existen dos formas de crear librerías estáticas:

  • LIBRERÍA COMPILADA: Se arma un archivo de cabecera (que sólo contiene los prototipos de las funciones) y toda la lógica de ésta se compila en un archivo objeto (oculta).
  • LIBRERÍA ABIERTA: Se incluye toda la librería en un archivo con extensión .h. Ideal para proyectos Open Source.


LIBRERÍA COMPILADA

Para crear una librería compilada, primero se debe crear un archivo .c con las funciones que quieras incluir en tu librería (es la que luego se compilará a un .o ó .a, denominada archivo objeto), y el .h con las cabeceras o prototipos de las funciones y todas las variables globales de esa librería.


Entonces, podemos ver a una librería como la unión de dos partes. Por un lado la librería en sí:


Y por otra parte, la cabecera:





CÓDIGO
.c
Para el .c (la librería que luego será compilada a un .o)
____________________________________________________________
#include "milibreria.h"

void funcion1(int param) {
// definicion ...
}
float funcion2(int param2) {
// definicion funcion 2...
}
____________________________________________________________
Siempre es buena práctica tener lo más documentado posible el .h, ya que éste determinará la facilidad de uso e implementación a futuro de la nueva librería que hayamos creado.

.h

Para el .h (el archivo adjunto que contiene declaración de variables y comentarios acerca de la librería)

____________________________________________________________

#ifndef _MILIBRERIA_H_
#define _MILIBRERIA_H__

void funcion1(int param);

float funcion1(int param2);  //comentario

/*comentarios

de múltiples lineas*/

#endif

____________________________________________________________

 

Las directivas

#ifndef _MILIBRERIA_H_
#define _MILIBRERIA_H_

tienen como finalidad evitar que se repitan si existen en el sistema. Al final de la declaración de los prototipos siempre debe finalizarse con

#endif


 

 

COMPILAR UNA LIBRERÍA

Para compilar una nueva librería y generar finalmente los archivos .o (objeto) y .h (cabecera) utilizando gcc, se ingresa el siguiente comando desde el directorio donde se encuentran ambos archivos:


gcc -c milibreria.c -o milibreria.o

 

De aquí se obtendrán los ficheros objeto (.o) de todas las fuentes (.c). La opción -c le dice al compilador que no cree un ejecutable, sino sólo un fichero objeto.

Allí se generarán dos archivos: un preprocesado y compilado del objeto (el .o); y el archivo de cabeceras (.h) que sólo es preprocesado, pero no compilado.

 

 

Posteriormente al ser llamado en un programa cualquiera mediante la sentencia

 

#include “milibreria.h”

 

su forma de acceso es como se ve en la siguiente figura:

 

 

 

PROCESO DE COMPILADO

Mediante el comando ingresado al compilador, éste generará a partir de el archivo .h + .c un único archivo de salida con extensión .o, el cual condensa toda la lógica de la librería creada.

Posteriormente la librería deberá ser distribuida con estos dos archivos.

Siempre es buena práctica tener lo más documentado posible el .h, ya que éste determinará la facilidad de uso e implementación a futuro de la nueva librería que hayamos creado.

 



EJEMPLO

Este es un ejemplo de aplicación de una librería que calcula el área para diversas figuras geométricas.

Se arma el archivo .c con la implementación de las funciones, el archivo de cabeceras .h y se lo compila. Por otra parte el programa .cpp hará uso de las funciones creadas.

.c

____________________________________________________________

#include "milibreria.h"

 

float a_triangulo(float base,float altura){

return ((base*altura)/2);

}

float a_rectangulo(float base,float altura){

return (base*altura);

}

float a_circulo(float radio){

return (3.1415926*radio*radio);

}

____________________________________________________________

 

.h

____________________________________________________________

#ifndef _MILIBRERIA_H_

#define _MILIBRERIA_H_

 

float a_triangulo(float base,float altura)

float a_rectangulo(float base,float altura)

float a_circulo(float radio)


#endif

____________________________________________________________

 

 

 

.cpp

____________________________________________________________

#include <iostream>

#include "milibreria.h"

using namespace std;

 

int main() {

float base,altura,radio,area;

cout<<"Vamos a utilizar la libreria recien creada\n";

cout<<"Ingrese base: ";

cin>>base;

cout<<"Ingrese altura: ";

cin>>altura;

cout<<"Ingrese radio: ";

cin>>radio;

//Ahora llamamos a la libreria

cout<<"Si fuese un rectangulo, el area es de: "<<a_rectangulo(base,altura)<<endl;

cout<<"Si fuese un triangulo, el area es de: "<<a_triangulo(base,altura)<<endl;

cout<<"Si fuese un circulo, el area es de: "<<a_circulo(radio)<<endl;

return 0;

}

____________________________________________________________

 

 

 

LIBRERÍA ABIERTA

La librería abierta consiste en armar todas las funciones en un archivo .h que luego se lo incluye a los programas que lo necesiten haciendo uso de

 

#include “milibreria.h”

 

Esta es mucho más simple de utilizar e implementar, ya que no es necesaria la compilación de la librería antes de poder utilizarla.

Es ideal para proyectos de código abierto.

 

 

 

EJEMPLO

Siguiendo el mismo ejemplo que el anterior, haremos una librería abierta en C++ que calcule el área de diversas figuras geométricas.

 

.h

____________________________________________________________

//vemos que todas las funciones se implementan aquí mismo,

//al momento de declararlas

#ifndef _MILIBRERIA_H_

#define _MILIBRERIA_H_

 

float a_triangulo(float base,float altura){

return ((base*altura)/2);

}

float a_rectangulo(float base,float altura){

return (base*altura);

}

float a_circulo(float radio){

return (3.1415926*radio*radio);

}

#endif

____________________________________________________________

 

 

.cpp

____________________________________________________________

#include <iostream>

#include "milibreria.h"

using namespace std;

 

int main() {

float base,altura,radio,area;

cout<<"Vamos a utilizar la libreria recien creada\n";

cout<<"Ingrese base: ";

cin>>base;

cout<<"Ingrese altura: ";

cin>>altura;

cout<<"Ingrese radio: ";

cin>>radio;

//Ahora llamamos a la libreria

cout<<"Si fuese un rectangulo, el area es de: "<<a_rectangulo(base,altura)<<endl;

cout<<"Si fuese un triangulo, el area es de: "<<a_triangulo(base,altura)<<endl;

cout<<"Si fuese un circulo, el area es de: "<<a_circulo(radio)<<endl;

return 0;

____________________________________________________________

 


Licencia . Ver información de licencia & cómo copiar material de esta web aquí

Desarrollado por Cristian1604. Las imágenes son de libre uso siempre que se cite al autor o a la página web


#include "milibreria.h"

float a_triangulo(float base,float altura){

return ((base*altura)/2);

}

float a_rectangulo(float base,float altura){

return (base*altura);

}

float a_circulo(float radio){

return (3.1415926*radio*radio);

}