Вы находитесь на странице: 1из 5

Las libreras compartidas en Linux, que son y co...

Inicio

Tutoriales

Artculos

ARTCULOS :

http://ovtoaster.com/las-librerias-compartidas-en-...

Participa

Buscar...

Prism-Break : No dejes que te espen

Home / Aprende Linux / Linux / Programacin / Las libreras compartidas en Linux, que son y como gestionarlas

Aprende Linux, Linux, Programacin

17 Marzo, 2014

AsierPH

Las libreras compartidas en Linux, que son y como gestionarlas


Antes de empezar la explicacin sobre las libreras compartidas creo que es conveniente denir bien lo que es una librera y los
tipos de libreras que hay. Una librera es un chero que contiene un conjunto de funciones, escritas en un lenguaje de
programacin, para ser utilizadas por un programa, de forma que si un programa necesita usar estas funcionalidades puede
acceder a la librera sin tener que reescribir el cdigo. La diferencia entre un programa y una librera es mnima, la nica
diferencia es que una librera no se ejecuta de forma autnoma ( no contiene el bloque de instruccin main ), pero por lo dems
funciona como un programa normal ( tambin puede requerir de otras libreras para funcionar).

Tipos de libreras
Existen dos tipos de libreras, las libreras compartidas o dinmicas y las libreras estticas. La diferencia entre ambas es que
mientras en las libreras compartidas el acceso es dinmico y se realiza en tiempo de ejecucin, en las estticas las
funcionalidades son enlazadas en tiempo de compilacin y sustituidas por la llamada en el chero ejecutable nal.

Un conjunto de funciones propuestas por una o varias libreras forma una API ( application programming Interface) y
estas se pueden agrupar en un framework que ofrece una solucin completa para un dominio dado.

APIs y Frameworks

Las libreras compartidas


En este articulo vamos a tratar las libreras compartidas, y mas especcamente sobre las de Linux. En Linux ( y en Unix ) las
libreras compartidas se llaman Shared Objects y llevan el sujo .so ( su equivalente en Windows son las .dll ).
Como ya hemos mencionado, las libreras compartidas se vinculan a un programa en tiempo de ejecucin, permitiendo que
el cdigo de la librera se cargue en memoria una nica vez y pueda ser usado por varios programas, de esta forma se consigue
que el tamao del cdigo sea menor con su correspondiente ahorro de espacio en memoria.
Ademas de esto con las libreras compartidas se cumple el principio de modularidad ( programacin modular o orientada a
objetos ), de forma que si necesitamos modicar alguna funcionalidad nos bastara con editar la librera que la contiene, dejando el
programa que las utiliza sin modicar.

Los nombres de las libreras compartidas

1 de 5

14/04/15 05:49

Las libreras compartidas en Linux, que son y co...

http://ovtoaster.com/las-librerias-compartidas-en-...

Por convenio las libreras compartidas pueden tener varios tipos de nombre :
- El nombre usado por el enlazador (lib + nombre de la libreria + .so)
- Nombre completo (lib + nombre de la libreria + .so + . + numero de versin) // Link hacia la librera con el nombre real
- Nombre real (lib + nombre de la libreria + .so + . + numero de versin + . + numero de subversin + . + revisin ) // La revisin
es opcional
Para el cambio de versiones hay que tener dos factores en cuenta, el numero de la subversin se cambia cuando se realizan
cambios en la librera y esta no pierde compatibilidad con la version anterior, pero si se pierde compatibilidad el cambio tiene
que ser de versin y no de subversin. Gracias a este convenio de nombres es posible que mltiples versiones de una librera
compartida coexistan en el sistema.

Dnde se encuentran dentro de la jerarqua de cheros?


En el articulo Gestin de cheros en Linux para dummies hablamos sobre la jerarqua de cheros en Linux, en esta jerarqua
existen lugares en los que se almacenan este tipo de libreras. Las libreras compartidas se colocan en directorios denominados lib:
/lib : Libreras de sistema, vitales
/usr/lib : Libreras de usuario bsicas, no se necesitan en el boot
/usr/local/lib : Libreras que no forman parte de la distribucin estndar
La librera mas importante del sistema es la de C. Todos los programas compilados son vinculados a libc, por lo que mejor no
borres esta libreria, a no ser que quieras que el sistema deje de funcionar.

Que libreras tiene vinculadas un programa?


Gracias al comando ldd podemos conocer las libreras vinculadas a un programa. Como parmetro tenemos que pasar la
ubicacin del programa.
Por ejemplo si queremos conocer las libreras asociadas al editor de texto Gedit el comando seria el siguiente :
ldd /usr/bin/gedit
El comando ldd tambin nos indicara si falta alguna librera asociada.

Aadiendo nuevas libreras


Para aadir una nueva librera, tenemos que ubicarla en uno de los directorios mencionados y despus ejecutar el programa
ldcong. ldcong se va a encargar de dejar la librera accesible para el enlazador, creando los vnculos y cach necesarios en el
archivo /etc/ld.so.conf, y en los directorios de conanza (/lib y /usr/lib).
Si se da el caso que la ubicacin de la librera no es una de las estndares ( las mencionadas ), sera necesario agregar el directorio a
/etc/ld.so.conf.

El enlazador dinmico ld.so


Ya hemos dicho que los cheros binarios en Linux requieren un enlace dinmico ( a no ser que se opte por el enlace esttico ), y de
este enlace se encargan los programas ld.so y ld-linux.so*. La misin de estos dos es encontrar y cargar las bibliotecas
compartidas requeridas por el programa en cuestin, preparar el programa para ejecutarse y ejecutarlo. Para ello el binario en
cuestin ofrece el nombre de las bibliotecas que necesita y ld.so se encarga de buscarlas en las siguientes ubicaciones :
Las denidas a travs de la variable de entorno LD_LIBRARY_PATH. Salvo cuando el ejecutable tiene activo el bit setuid/setgid, en
cuyo caso se ignora.
Las denidas en el propio binario.
En el chero /etc/ld.so.cache, que contiene una lista compilada de bibliotecas candidatas encontradas previamente en la ruta de
bibliotecas ampliada.
En la ruta predeterminada /lib, y despues en /usr/lib/. Si el binario fue enlazado con la opcin -znodeib, se omite este paso.
La primera librera encontrada que cumpla la dependencia ser la utilizada. Hay que tener en cuenta que lo que el binario
contiene no es una lista con los enlaces a cada librera, sino una lista de rutas adicionales en las que buscar las dependencias ( si
las tiene ).

OvToaster utiliza cookies para que usted tenga la mejor experiencia de usuario. Si usted contina navegando esta dando el consentimiento para la aceptacin de las cookies.

2 de 5

Ok

Mas info

14/04/15 05:49

Creando libreras estticas y compartidas en Linu...

Inicio

Tutoriales

Artculos

http://ovtoaster.com/creando-librerias-estaticas-y...

Participa

Buscar...

ARTCULOS :

Project Euler : retos matemticos para programar

Home / Aprende Linux / Linux / Programacin / Creando libreras estticas y compartidas en Linux con gcc

Aprende Linux, Linux, Programacin

23 Abril, 2014

AsierPH

Creando libreras estticas y compartidas en Linux con gcc


En el artculo Las libreras compartidas en Linux, que son y como gestionarlas habl sobre los dos tipos de
libreras que podemos usar, sobre sus caractersticas principales y entr en ms detalle con las libreras
compartidas, pero falt hablar sobre como crearlas y usarlas. En este artculo voy a intentar explicar de forma
resumida y metdica el proceso de creacin de tanto las libreras estticas como de las compartidas, ademas
de hacer una prueba de rendimiento para intentar ver la diferencia entre ambas en cuestin del tiempo de
ejecucin.
Para realizar este proceso vamos a utilizar el compilador de C gcc, este compilador viene incluido por defecto en todas las
distribuciones de Linux, de forma que no tendremos que instalar ningn programa ni compilador adicional. Si quieres ms
informacin sobre este compilador de GNU puedes acceder a su pagina ocial ( en Ingles ) . Sin ms que decir, paso a especicar
los pasos que hay que seguir para crear y ligar las libreras a nuestros programas.

La librera
El cdigo que vamos a utilizar para las pruebas es una sencilla funcin que nos calcula el numero pi en base al numero de
iteraciones que indiquemos como parmetro, el cdigo es el siguiente:
libreriaPi.c
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void funcion (double *t, double *k, double *l)
{
(*t) += (*l)/(*k);
(*k) += 2.0;
(*l) *= -1.0;
}
Adems de crear la librera tenemos que crear su chero cabecera:
libreriaPi.h
void funcion (double *t, double *k, double *l);

Creando la librera esttica


Una librera esttica se crea con el archiver (ar) a partir de un archivo tipo objeto que creamos desde nuestro cdigo en C. Los
pasos a seguir son los siguientes :
Creamos un objeto a partir de nuestro cdigo en C:
gcc -c libreriaPi.c -o libreriaPi.o
Una vez tenemos nuestro chero objeto llamamos al archiver(ar) para que nos genere la librera:
ar rcs libpi.a libreriaPi.o

La librera tiene que empezar obligatoriamente con las tres letras lib y tiene que tener la extensin .a

1 de 5

14/04/15 05:50

Creando libreras estticas y compartidas en Linu...

http://ovtoaster.com/creando-librerias-estaticas-y...

Nombre de la librera

Creando la librera compartida


En el caso de las libreras compartidas tambin es necesario crear un chero objeto, hay que tener en cuenta que al crear el
chero con el mismo nombre que en el caso de la librera esttica, estamos sobrescribiendo y eliminando el chero anterior,
algo conveniente teniendo en cuenta que la librera esttica ya esta creada.
Creamos el objeto:
gcc -c -fPIC libreriaPi.c -o libreriaPi.o
Una vez creado el objeto procedemos a crear la librera dinmica :
gcc -shared -Wl,-soname,libpi.so.1 -o libpi.so.1.0.1

libreriaPi.o

El nombre de la librera tiene que empezar por lib

Nombre de la librera

El programa principal
Evidentemente para utilizar la librera necesitamos un programa, en este caso vamos a utilizar un programa que simplemente
recoge el parmetro que le pasamos ( numero de iteraciones ) e imprime por pantalla el valor de pi calculado por la funcin de la
librera, ademas nos imprime el valor que da math.h de pi y la diferencia entre ambos. El cdigo es el siguiente:
programaPi.c
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include "libreriaPi.h"

int main(int argc, char *argv[])


{
double t, k = 3.0, l = -1.0;
int i, s;
if(argc < 2){
fprintf(stderr, "%s <no. de iteracines>\n", argv[0]);
exit(1);
}
t = 1.0;
for(i = 0, s = atoi(argv[1]); i < s; i++)
{
funcion(&t, &k, &l);
}
t *= 4;
printf("Valor de Pi calculado: %1.16f, Valor de Pi en math.h: %.16f\n", t, M_PI);
printf("Diferencia: %.16f\n", fabs(M_PI - t));
return 0;
}

Ligando la librera esttica


Para ligar la librera esttica a nuestro programa utilizamos la siguiente instruccin:
gcc -static programaPi.c -L. -lpi -o piEstatico
El parmetro -lpi indica el nombre de la librera sin las tres letras lib y sin su extensin. -l + nombre (sin lib y extensin )

Ligando la librera compartida


OvToaster utiliza cookies para que usted tenga la mejor experiencia de usuario. Si usted contina navegando esta dando el consentimiento para la aceptacin de las cookies.

2 de 5

Ok

Mas info

14/04/15 05:50

Creando libreras estticas y compartidas en Linu...

http://ovtoaster.com/creando-librerias-estaticas-y...

gcc main.c -o dynamically_linked -L. -lpi


Como en el caso anterior el parmetro -lpi indica el nombre de la librera sin las tres letras lib y sin su extensin. -l +
nombre (sin lib y extensin )

Pruebas de tiempo de ejecucin


Una vez tenemos el mismo programa compilado con una librera esttica y otra compartida vamos a probar cual de los dos tiene
un tiempo de ejecucin mayor. Para ello vamos a utilizar la instruccin time que nos va indicar esto mismo, primero vamos a
realizar la prueba con 1000000 iteraciones, el resultado es el siguiente:

Como podemos observar la diferencia es nula, teniendo en cuenta que existen muchos factores que pueden afectar al tiempo de
ejecucin. Aun as realizamos una segunda prueba con 950000000 iteraciones, los resultados es el siguiente :

Podemos concluir que en el caso de esta librera y programa no afecta utilizar una librera esttica o compartida en cuestin de
tiempo de ejecucin. Aun as existen otras ventajas que ya mencionamos en el anterior artculo.

Espero que os sea de ayuda esta gui de creacin de libreras estticas y dinmicas.
Aqu tenis la principal fuente del artculo

Comparte este articulo:

OvToaster utiliza cookies para que usted tenga la mejor experiencia de usuario. Si usted contina navegando esta dando el consentimiento para la aceptacin de las cookies.

3 de 5

Ok

Mas info

14/04/15 05:50

Вам также может понравиться