librerías en gnu-linux

5
Buscar... ARTÍCULOS : Prism-Break : No dejes que te espíen Home / Aprende Linux / Linux / Programación / Las librerías compartidas en Linux, que son y como gestionarlas Aprende Linux, Linux, Programación 17 Marzo, 2014 AsierPH 2 Las librerías compartidas en Linux, que son y como gestionarlas Antes de empezar la explicación sobre las librerías compartidas creo que es conveniente definir bien lo que es una librería y los tipos de librerías que hay. Una librería es un fichero que contiene un conjunto de funciones, escritas en un lenguaje de programación, para ser utilizadas por un programa, de forma que si un programa necesita usar estas funcionalidades puede acceder a la librería sin tener que reescribir el código. La diferencia entre un programa y una librería es mínima, la única diferencia es que una librería no se ejecuta de forma autónoma ( no contiene el bloque de instrucción main ), pero por lo demás funciona como un programa normal ( también puede requerir de otras librerías para funcionar). Tipos de librerías Existen dos tipos de librerías, las librerías compartidas o dinámicas y las librerías estáticas. La diferencia entre ambas es que mientras en las librerías compartidas el acceso es dinámico y se realiza en tiempo de ejecución, en las estáticas las funcionalidades son enlazadas en tiempo de compilación y sustituidas por la llamada en el fichero ejecutable final. Las librerías compartidas En este articulo vamos a tratar las librerías compartidas, y mas específicamente sobre las de Linux. En Linux ( y en Unix ) las librerías compartidas se llaman Shared Objects y llevan el sufijo .so ( su equivalente en Windows son las .dll ). Como ya hemos mencionado, las librerías compartidas se vinculan a un programa en tiempo de ejecución, permitiendo que el código de la librería se cargue en memoria una única vez y pueda ser usado por varios programas, de esta forma se consigue que el tamaño del código sea menor con su correspondiente ahorro de espacio en memoria. Ademas de esto con las librerías compartidas se cumple el principio de modularidad ( programación modular o orientada a objetos ), de forma que si necesitamos modificar alguna funcionalidad nos bastara con editar la librería que la contiene, dejando el programa que las utiliza sin modificar. Los nombres de las librerías compartidas Un conjunto de funciones propuestas por una o varias librerías forma una API ( application programming Interface) y estas se pueden agrupar en un framework que ofrece una solución completa para un dominio dado. APIs y Frameworks Inicio Tutoriales Artículos Participa Las librerías compartidas en Linux, que son y co... http://ovtoaster.com/las-librerias-compartidas-en-... 1 de 5 14/04/15 05:49

Upload: jennifer-ingram

Post on 06-Feb-2016

31 views

Category:

Documents


0 download

DESCRIPTION

Librerías en GNU-Linux

TRANSCRIPT

Page 1: Librerías en GNU-Linux

Buscar...

ARTÍCULOS : Prism-Break : No dejes que te espíen

Home / Aprende Linux / Linux / Programación / Las librerías compartidas en Linux, que son y como gestionarlas

Aprende Linux, Linux, Programación 17 Marzo, 2014 AsierPH 2

Las librerías compartidas en Linux, que son y como gestionarlas

Antes de empezar la explicación sobre las librerías compartidas creo que es conveniente definir bien lo que es una librería y lostipos de librerías que hay. Una librería es un fichero que contiene un conjunto de funciones, escritas en un lenguaje deprogramación, para ser utilizadas por un programa, de forma que si un programa necesita usar estas funcionalidades puedeacceder a la librería sin tener que reescribir el código. La diferencia entre un programa y una librería es mínima, la únicadiferencia es que una librería no se ejecuta de forma autónoma ( no contiene el bloque de instrucción main ), pero por lo demásfunciona como un programa normal ( también puede requerir de otras librerías para funcionar).

Tipos de librerías

Existen dos tipos de librerías, las librerías compartidas o dinámicas y las librerías estáticas. La diferencia entre ambas es quemientras en las librerías compartidas el acceso es dinámico y se realiza en tiempo de ejecución, en las estáticas lasfuncionalidades son enlazadas en tiempo de compilación y sustituidas por la llamada en el fichero ejecutable final.

Las librerías compartidas

En este articulo vamos a tratar las librerías compartidas, y mas específicamente sobre las de Linux. En Linux ( y en Unix ) laslibrerías compartidas se llaman Shared Objects y llevan el sufijo .so ( su equivalente en Windows son las .dll ).

Como ya hemos mencionado, las librerías compartidas se vinculan a un programa en tiempo de ejecución, permitiendo queel código de la librería se cargue en memoria una única vez y pueda ser usado por varios programas, de esta forma se consigueque el tamaño del código sea menor con su correspondiente ahorro de espacio en memoria.

Ademas de esto con las librerías compartidas se cumple el principio de modularidad ( programación modular o orientada aobjetos ), de forma que si necesitamos modificar alguna funcionalidad nos bastara con editar la librería que la contiene, dejando elprograma que las utiliza sin modificar.

Los nombres de las librerías compartidas

Un conjunto de funciones propuestas por una o varias librerías forma una API ( application programming Interface) yestas se pueden agrupar en un framework que ofrece una solución completa para un dominio dado.

APIs y Frameworks

Inicio Tutoriales Artículos Participa

Las librerías compartidas en Linux, que son y co... http://ovtoaster.com/las-librerias-compartidas-en-...

1 de 5 14/04/15 05:49

Page 2: Librerías en GNU-Linux

Por convenio las librerías 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 versión) // Link hacia la librería con el nombre real

- Nombre real (‘lib’ + nombre de la libreria + ‘.so’ + ‘.’ + numero de versión + ‘.’ + numero de subversión + ‘.’ + revisión ) // La revisiónes opcional

Para el cambio de versiones hay que tener dos factores en cuenta, el numero de la subversión se cambia cuando se realizancambios en la librería y esta no pierde compatibilidad con la version anterior, pero si se pierde compatibilidad el cambio tieneque ser de versión y no de subversión. Gracias a este convenio de nombres es posible que múltiples versiones de una libreríacompartida coexistan en el sistema.

¿Dónde se encuentran dentro de la jerarquía de �cheros?

En el articulo Gestión de ficheros en Linux para dummies hablamos sobre la jerarquía de ficheros en Linux, en esta jerarquíaexisten lugares en los que se almacenan este tipo de librerías. Las librerías compartidas se colocan en directorios denominados lib:

– /lib : Librerías de sistema, vitales

– /usr/lib : Librerías de usuario básicas, no se necesitan en el boot

– /usr/local/lib : Librerías que no forman parte de la distribución estándar

La librería mas importante del sistema es la de C. Todos los programas compilados son vinculados a libc, por lo que mejor noborres esta libreria, a no ser que quieras que el sistema deje de funcionar.

¿Que librerías tiene vinculadas un programa?

Gracias al comando ldd podemos conocer las librerías vinculadas a un programa. Como parámetro tenemos que pasar laubicación del programa.

Por ejemplo si queremos conocer las librerías asociadas al editor de texto Gedit el comando seria el siguiente :

ldd /usr/bin/gedit

El comando ldd también nos indicara si falta alguna librería asociada.

Añadiendo nuevas librerías

Para añadir una nueva librería, tenemos que ubicarla en uno de los directorios mencionados y después ejecutar el programaldconfig. ldconfig se va a encargar de dejar la librería accesible para el enlazador, creando los vínculos y caché necesarios en elarchivo /etc/ld.so.conf, y en los directorios de confianza (/lib y /usr/lib).

Si se da el caso que la ubicación de la librería no es una de las estándares ( las mencionadas ), sera necesario agregar el directorio a/etc/ld.so.conf.

El enlazador dinámico ld.so

Ya hemos dicho que los ficheros binarios en Linux requieren un enlace dinámico ( a no ser que se opte por el enlace estático ), y deeste enlace se encargan los programas ld.so y ld-linux.so*. La misión de estos dos es encontrar y cargar las bibliotecascompartidas requeridas por el programa en cuestión, preparar el programa para ejecutarse y ejecutarlo. Para ello el binario encuestión ofrece el nombre de las bibliotecas que necesita y ld.so se encarga de buscarlas en las siguientes ubicaciones :

– Las definidas a través de la variable de entorno LD_LIBRARY_PATH. Salvo cuando el ejecutable tiene activo el bit setuid/setgid, encuyo caso se ignora.

– Las definidas en el propio binario.

– En el fichero /etc/ld.so.cache, que contiene una lista compilada de bibliotecas candidatas encontradas previamente en la ruta debibliotecas ampliada.

– En la ruta predeterminada /lib, y despues en /usr/lib/. Si el binario fue enlazado con la opción -znodeflib, se omite este paso.

La primera librería encontrada que cumpla la dependencia será la utilizada. Hay que tener en cuenta que lo que el binariocontiene no es una lista con los enlaces a cada librería, sino una lista de rutas adicionales en las que buscar las dependencias ( silas tiene ).

OvToaster utiliza cookies para que usted tenga la mejor experiencia de usuario. Si usted continúa navegando esta dando el consentimiento para la aceptación de las cookies. OkOk Mas infoMas info

Las librerías compartidas en Linux, que son y co... http://ovtoaster.com/las-librerias-compartidas-en-...

2 de 5 14/04/15 05:49

Page 3: Librerías en GNU-Linux

Buscar...

ARTÍCULOS : Project Euler : retos matemáticos para programar

Home / Aprende Linux / Linux / Programación / Creando librerías estáticas y compartidas en Linux con gcc

Aprende Linux, Linux, Programación 23 Abril, 2014 AsierPH 0

Creando librerías estáticas y compartidas en Linux con gcc

En el artículo “Las librerías compartidas en Linux, que son y como gestionarlas” hablé sobre los dos tipos delibrerías que podemos usar, sobre sus características principales y entré en más detalle con las libreríascompartidas, pero faltó hablar sobre como crearlas y usarlas. En este artículo voy a intentar explicar de formaresumida y metódica el proceso de creación de tanto las librerías estáticas como de las compartidas, ademasde hacer una prueba de rendimiento para intentar ver la diferencia entre ambas en cuestión del tiempo deejecución.

Para realizar este proceso vamos a utilizar el compilador de C gcc, este compilador viene incluido por defecto en todas lasdistribuciones de Linux, de forma que no tendremos que instalar ningún programa ni compilador adicional. Si quieres másinformación sobre este compilador de GNU puedes acceder a su pagina oficial ( en Ingles ) . Sin más que decir, paso a especificarlos pasos que hay que seguir para crear y ligar las librerías a nuestros programas.

La librería

El código que vamos a utilizar para las pruebas es una sencilla función que nos calcula el numero pi en base al numero deiteraciones que indiquemos como parámetro, el código 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;

}

Además de crear la librería tenemos que crear su fichero cabecera:

libreriaPi.h

void funcion (double *t, double *k, double *l);

Creando la librería estática

Una librería estática se crea con el archiver (ar) a partir de un archivo tipo objeto que creamos desde nuestro código en C. Lospasos a seguir son los siguientes :

Creamos un objeto a partir de nuestro código en C:

gcc -c libreriaPi.c -o libreriaPi.o

Una vez tenemos nuestro fichero objeto llamamos al archiver(ar) para que nos genere la librería:

ar rcs libpi.a libreriaPi.o

La librería tiene que empezar obligatoriamente con las tres letras lib y tiene que tener la extensión .a

Inicio Tutoriales Artículos Participa

Creando librerías estáticas y compartidas en Linu... http://ovtoaster.com/creando-librerias-estaticas-y...

1 de 5 14/04/15 05:50

Page 4: Librerías en GNU-Linux

Creando la librería compartida

En el caso de las librerías compartidas también es necesario crear un fichero objeto, hay que tener en cuenta que al crear elfichero con el mismo nombre que en el caso de la librería estática, estamos sobrescribiendo y eliminando el fichero anterior,algo conveniente teniendo en cuenta que la librería estática ya esta creada.

Creamos el objeto:

gcc -c -fPIC libreriaPi.c -o libreriaPi.o

Una vez creado el objeto procedemos a crear la librería dinámica :

gcc -shared -Wl,-soname,libpi.so.1 -o libpi.so.1.0.1 libreriaPi.o

El programa principal

Evidentemente para utilizar la librería necesitamos un programa, en este caso vamos a utilizar un programa que simplementerecoge el parámetro que le pasamos ( numero de iteraciones ) e imprime por pantalla el valor de pi calculado por la función de lalibrería, ademas nos imprime el valor que da math.h de pi y la diferencia entre ambos. El código 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 librería estática

Para ligar la librería estática a nuestro programa utilizamos la siguiente instrucción:

gcc -static programaPi.c -L. -lpi -o piEstatico

El parámetro -lpi indica el nombre de la librería sin las tres letras lib y sin su extensión. -l + nombre (sin lib y extensión )

Ligando la librería compartida

Nombre de la librería

El nombre de la librería tiene que empezar por lib

Nombre de la librería

OvToaster utiliza cookies para que usted tenga la mejor experiencia de usuario. Si usted continúa navegando esta dando el consentimiento para la aceptación de las cookies. OkOk Mas infoMas info

Creando librerías estáticas y compartidas en Linu... http://ovtoaster.com/creando-librerias-estaticas-y...

2 de 5 14/04/15 05:50

Page 5: Librerías en GNU-Linux

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

Como en el caso anterior el parámetro -lpi indica el nombre de la librería sin las tres letras lib y sin su extensión. -l +nombre (sin lib y extensión )

Pruebas de tiempo de ejecución

Una vez tenemos el mismo programa compilado con una librería estática y otra compartida vamos a probar cual de los dos tieneun tiempo de ejecución mayor. Para ello vamos a utilizar la instrucción time que nos va indicar esto mismo, primero vamos arealizar 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 deejecución. Aun así realizamos una segunda prueba con 950000000 iteraciones, los resultados es el siguiente :

Podemos concluir que en el caso de esta librería y programa no afecta utilizar una librería estática o compartida en cuestión detiempo de ejecución. Aun así existen otras ventajas que ya mencionamos en el anterior artículo.

Espero que os sea de ayuda esta guiá de creación de librerías estáticas y dinámicas.

Aquí tenéis la principal fuente del artículo

Comparte este articulo:OvToaster utiliza cookies para que usted tenga la mejor experiencia de usuario. Si usted continúa navegando esta dando el consentimiento para la aceptación de las cookies. OkOk Mas infoMas info

Creando librerías estáticas y compartidas en Linu... http://ovtoaster.com/creando-librerias-estaticas-y...

3 de 5 14/04/15 05:50