17
Dpto. de Cs. e Ing. de la Computación. Universidad Nacional del Sur. [Organización de Computadoras] LIBRERÍAS DINÁMICAS EN C.

[Organización de Computadoras] › ~ags › OC › downloads › APUNTES DE... · Organización de Computadoras –2º cuatrimestre 2019 Librerías estáticas o Son librerías que

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Dpto. de Cs. e Ing. de la Computación.Universidad Nacional del Sur.

[Organización de Computadoras]

LIBRERÍAS DINÁMICAS EN C.

Organización de Computadoras – 2º cuatrimestre 2019

Copyright

o Copyright © 2019 Ing. Federico Joaquín ([email protected])

o El uso total o parcial de este material está permitido siempre que se hagamención explícita de su fuente: “Notas de Clase. Organización deComputadoras.” Federico Joaquín. Universidad Nacional del Sur. (c) 2019.

o Las presentes transparencias constituyen una guía acotada y simplificada de latemática abordada, y deben utilizarse únicamente como material adicional o deapoyo a la bibliografía indicada en el programa de la materia.

2jueves, 19 de septiembre de 2019

Organización de Computadoras – 2º cuatrimestre 2019

Librerías en C.

3jueves, 19 de septiembre de 2019

Organización de Computadoras – 2º cuatrimestre 2019

Librerías :: ¿Qué son?o Las librerías son una forma sencilla y versátil de modularizar y reutilizar código.

o Una librería es en esencia, un conjunto de funciones y/o procedimientos.

o Las librerías permiten encapsular funcionalidad, que luego puede estar disponible en diferentes programas.

o Para que esta funcionalidad encapsulada pueda ser utilizada, el programa que la requiera debe encargarse de enlazar la librería que la contiene.

o Las librerías pueden clasificarse en dos grandes familias:

• Librerías estáticas

• Librerías dinámicas

4jueves, 19 de septiembre de 2019

Organización de Computadoras – 2º cuatrimestre 2019

Librerías estáticaso Son librerías que se enlazan al compilar un programa.

o De esta forma, la librería queda junto con el código fuente compilado del programa, en un único ejecutable.

o Ventajas de una librería estática:

• Sólo se copia la funcionalidad a utilizar por el programa (si la librería posee 10 funciones, pero el programa sólo usa 2, son sólo esas 2 las que se copian).

• Permiten una ejecución más rápida, ya que el código ejecutable de la funcionalidad se encuentra junto con el ejecutable del programa.

5jueves, 19 de septiembre de 2019

Organización de Computadoras – 2º cuatrimestre 2019

Librerías estáticaso Son librerías que se enlazan al compilar un programa.

o De esta forma, la librería queda junto con el código fuente compilado del programa, en un único ejecutable.

o Desventajas de una librería estática:

• El código ejecutable final es más grande, debido a que se copia la funcionalidad.

• Un cambio en los fuentes de una librería estática, obliga a recompilar los programas que hacen uso de la funcionalidad provista por esta.

6jueves, 19 de septiembre de 2019

Organización de Computadoras – 2º cuatrimestre 2019

Librerías estáticaso Son librerías que se enlazan al compilar un programa.

o De esta forma, la librería queda junto con el código fuente compilado del programa, en un único ejecutable.

o Dependiendo el sistema operativo, pueden encontrarse con la extensión :

• .lib en Windows.

• .a en Linux.

7jueves, 19 de septiembre de 2019

Organización de Computadoras – 2º cuatrimestre 2019

Librerías dinámicaso Son librerías que se enlazan al ejecutar un programa.

o La librería no queda junto con el código fuente compilado del programa, sino que su funcionalidad se encuentra compilada en un archivo aparte.

o Ventajas de una librería dinámica:

• El código ejecutable final de un programa que hace uso de una librería dinámica es más pequeño, debido a que no se copia la funcionalidad de la librería en este.

• Los cambios que se realicen por sobre una librería dinámica, no obligan a recompilar cada uno de los programas que la utilizan.

8jueves, 19 de septiembre de 2019

Organización de Computadoras – 2º cuatrimestre 2019

Librerías dinámicaso Son librerías que se enlazan al ejecutar un programa.

o La librería no queda junto con el código fuente compilado del programa, sino que su funcionalidad se encuentra compilada en un archivo aparte.

o Desventajas de una librería dinámica:

• Pueden proveer una ejecución más lenta, ya que el código ejecutable de la funcionalidad se encuentra en un archivo por fuera del ejecutable del programa que la utiliza.

• Los programas deben necesariamente ser movidos junto con todas las librerías dinámicas que utilice.

9jueves, 19 de septiembre de 2019

Organización de Computadoras – 2º cuatrimestre 2019

Librerías dinámicaso Son librerías que se enlazan al ejecutar un programa.

o La librería no queda junto con el código fuente compilado del programa, sino que su funcionalidad se encuentra compilada en un archivo aparte.

o Dependiendo el sistema operativo, pueden encontrarse con la extensión :

• .dll en Windows.

• .so en Linux.

10jueves, 19 de septiembre de 2019

Organización de Computadoras – 2º cuatrimestre 2019

Librerías dinámicas ::un ejemplo

11jueves, 19 de septiembre de 2019

Librerías dinámicas :: Ejemplo

jueves, 19 de septiembre de 2019 12

#ifndef CALCULADORA_H_INCLUDED#define CALCULADORA_H_INCLUDED

extern void suma(int op1, int op2, int * res);extern void resta(int op1, int op2, int * res);extern void multiplicacion(int op1, int op2, int * res);extern void division(int op1, int op2, int * res);

#endif // CALCULADORA_H_INCLUDED

Considerar el caso de una librería que implementa una calculadora

#include <stdlib.h>#include "calculadora.h"

void suma(int op1, int op2, int * res){*res = op1 + op2;

}void resta(int op1, int op2, int * res){*res = op1 - op2;

}

void multiplicacion(int op1, int op2, int * res){*res = op1 * op2;

}

void division(int op1, int op2, int * res){if (op2 == 0) exit(EXIT_FAILURE);*res = op1 / op2;

}

Librerías dinámicas :: Ejemplo

jueves, 19 de septiembre de 2019 13

#include <stdlib.h>#include <stdio.h>#include "calculadora.h"

int main(){int op1, op2;int resultado;

printf("Ingrese operandos 1 y 2: ");scanf("%i %i", &op1, &op2);

suma(op1,op2, &resultado);printf("Suma igual a: %i \n", resultado);

resta(op1,op2, &resultado);printf("Resta igual a: %i \n", resultado);

multiplicacion(op1,op2, &resultado);printf("Multiplicacion igual a: %i \n", resultado);

division(op1,op2, &resultado);printf("Division igual a: %i \n", resultado);

return 0;}

Considerar el caso de un programa que utiliza esta calculadora

Librerías dinámicas :: Ejemplo

jueves, 19 de septiembre de 2019 14

Compilando librería en MinGW (Windows)

Se compila la librería:

• gcc –Wall -c calculadora.c

Se genera la DLL:

• gcc –Wall -o calculadora.dll calculadora.o -shared

Se compila el programa principal:

• gcc –Wall -c programa.c

Se genera el ejecutable, enlazando la DLL:

• gcc –Wall -o programa.exe programa.o calculadora.dll

Librerías dinámicas :: Ejemplo

jueves, 19 de septiembre de 2019 15

Compilando librería en GCC (Linux)

Se compila la librería:

• gcc –Wall -c calculadora.c

Se genera el SO:

• ld –Wall -o libcalculadora.so calculadora.o –shared

• Por defecto, las librerías dinámicas se notan con el prefijo lib seguido del nombre.

Se compila el programa principal:

• gcc –Wall -c programa.c

Se genera el ejecutable, enlazando el SO:

• gcc –Wall -o programa programa.o –LPath –lName

• -Path es la ruta hacia la carpeta donde está la librería.

• Name es el nombre de la librería sin el prefijo lib y sin la extensión .so

Librerías dinámicas :: Ejemplo

jueves, 19 de septiembre de 2019 16

Compilando librería en GCC (Linux)

Si se intenta ejecutar el programa, se indicará el siguiente error

• ./programa

• ./programa: error while loading shared libraries:libcalculadora.so: cannot open shared object file: Nosuch file or directory

El problema surge al intentar ejecutar el programa, ya que este busca en una ubicación estándar ( usr/lib ) la librería enlazada. Dicho esto, es necesario mover la librería hacia esta ubicación. Con permisos de root, se debe:

• $ cp /path/to/lib/libcalculadora.so /usr/lib

• $ chmod 0755 /usr/lib/libcalculadora.so

• $ ldconfig

Fin de la presentación.

Organización de Computadoras – 2º cuatrimestre 2019jueves, 19 de septiembre de 2019 17