Publicidad

viernes, 21 de noviembre de 2008

BIBLIOTECAS DINAMICAS EN LINUX

hola compañeros pues aqui les dejo un ejemplo de biliotecas dinamicas espero le entiendan por que yo tratare de hacer lo mismo jeje..... ´pues me estoy confundiendo con esto de las bibliotecas a mi me gustaria que nos lo explicaran un poco mas detallado por que me empiso a confundir feito ........... bueno niños los dejo.
A veces, varios programas necesitan hacer las mismas cosas, como E/S por ejemplo. Hace ya bastante tiempo se desarrolló el concepto de biblioteca (o librería) para adaptar esto. Las funciones se colocan en un archivo, y luego, cada vez que se crea un programa, este extrae de la biblioteca las funciones que necesita.

Este programa tiene dos archivos fuente. Supongamos que nuestra función tirarDado (del archivo tirador.c) nos es muy útil, no solo en nuestro programa, sino en muchos otros programas que utilicen dados. Podemos pensar entonces en colocar dicha función en una biblioteca para que otros programas puedan usarla.
Primero necesitamos crear la biblioteca compartida. Para ello compilamos el archivo que contiene la función así:
gcc -fPIC -c tirador.c
Ahora lo convertimos en una biblioteca compartida llamada libtirar.so.1.0:
gcc -shared -Wl,-soname,libtirar.so.1 -o libtirar.so.1.0 tirador.o
Por último crearemos un enlace para libtirar.so, para que el programa en ejecución no necesite mantener un registro de la información de versión en el nombre de la biblioteca compartida:
ln -s libtirar.so.1.0 libtirar.so.1ln -s libtirar.so.1 libtirar.so
Ahora que tenemos la biblioteca, debemos crear el programa principal para que enlace con esa biblioteca en tiempo de ejecución, en lugar de incluir el código dentro del ejecutable:
gcc -o juego juego.c -L. -ltirar
La opción -L. le indica al compilador que busque bibliotecas en el directorio actual, y la opción -ltirar le indica que busque una biblioteca llamada libtirar.so.
Al ejecutar el programa, el sistema operativo cargará dinámicamente la biblioteca correcta, pero tiene que saber donde buscarla. Si la biblioteca no se encuentra en un lugar estándar (/usr/lib por ejemplo), puede asignar una variable de entorno para que le indique en dónde localizar bibliotecas adicionales:
export LD_LIBRARY_PATH=/home/usuario/mislibrerias
Por último, para ver qué librerías usa un programa, utilice el comando ldd:
ldd juegolibtirar.so.1 =>/mnt/hda1/home/casidiablo/juegolibrerias/libtirar.so.1 (0x40018000)libc.so.6 => /lib/libc.so.6 (0x40029000)/lib/ld-linux.so.2 =>/lib/ld-linux.so.2 (0x40000000

No hay comentarios: