La diferencia entre las bibliotecas estáticas y dinámicas se puede. visto como la forma de llegar a trabajar. Usted puede conducir su coche o se puede coger un tren. Conduciendo su propio coche es un poco como una biblioteca estática. Tomar el tren es un poco como una biblioteca compartida.
Cuando usted conduce su coche todo lo que necesitas es el coche. Cuando usted toma el tren por lo general hay más de un vagón de tren en sí mismo. Por lo general, hay una locomotora, y luego algunos vehículos de pasajeros, y tal vez un furgón de cola para arrancar. Mientras que todos los coches están trabajando en armonía continúa para llegar al trabajo. Si cualquiera de los coches tiene un problema de sus posibilidades de llegar al trabajo disminuyen.
Al compilar un programa con bibliotecas estáticas estáticamente bibliotecas vinculadas se enlazan con el ejecutable final por el enlazador. Esto aumenta el tamaño del ejecutable. Del mismo modo, cuando una biblioteca se debe actualizar tendrás que compilar la nueva biblioteca y luego vuelva a compilar la aplicación para tomar ventaja de la nueva biblioteca. Ok, así que ¿por qué tenemos bibliotecas estáticas entonces? Bueno, si usted está arrancando el sistema en modo de mantenimiento bibliotecas estáticas pueden ser beneficiosos.
ar rcs library.A File1.o File2.o
o
ar-qcs library.A File1.o File2.o
int fun1 (int a, int b)
{
int c;
/ * agregar las dos variables * /
c = a + b;
(c);
}
int fun2 (int a, int b)
{
int c;
/ * agregar las dos variables * /
c = a + b;
return (c);
}
Por encima hay dos archivos, aquí se puede encontrar el Makefile para generar la biblioteca utilizando file1.o y file2.o
CC = gcc />
CFLAGS =-g-Wall
#. una extensión de biblioteca estática
# modo de extensión para la biblioteca dinámica
# paso 1:
# va al paso 2:
todo: libMylibrary.a
# paso 3:
# Vuelva al paso 2
# declare esta OBJS antes de su uso, aquí OBJS es una variable.
OBJS = $ (PWD) / archivo1 . o
$ ( PWD) / file2.o
# paso 2:
libMylibrary. a : $ (OBJS)
; ar-qcs libMylibrary.a $ (OBJS)
# paso 4:
# Volver al paso 3
$ (PWD) /% d:% c
limpia:
rm-f * . o
rm .-f * a
# include
# include
int fun1 extern (int a, int b);
extern int fun2 (int a , int b);
int main ()
{
printf (» El valor de Función1:% d «, fun1 (4,5));
printf («El valor de Función2:% d», fun2 (6,7));
return 0;
}
CFLAGS =-g-Wall
# una extensión de la biblioteca estática
#.. por lo que la extensión de la biblioteca dinámica
# paso 1:
# va al paso 2:
todo: prueba />
# paso 3:
# Vuelva al paso 2
$ (CC) $ (CFLAGS) $ (OBJS) $ (LIBDIR) $ (LIBLOG) – o test.exe
# paso 4:
# Volver al paso 3 />
# Para biblioteca estática, siempre incluyen LIB DIR
Obligatorio LIBDIR =-L. /
= LIBLOG-lMylibrary
limpia:
rm-f * o
rm-f *. a
Punto Importante:
Cuando quiera que esté la vinculación de la biblioteca estática para mainFile, es obligatorio mencionar el LIBDIR (donde la biblioteca está presente) opción con-L. Estos $ (LIBDIR) debe incluirse cuando se genera el archivo exe
aquí DMODULE genera la biblioteca estática y cModule genera los archivos objeto (o de )
crear directorios bajo / root / mreddya / MAKEFILE_EXERCISE / , como se muestra a continuación.
-bash-3.2 # mkdir DMODULE
-bash-3.2 # cd DMODULE /
Cree cuatro archivos bajo el directorio principal, dModulefile1.c dModulefile2.c dModulefile3.c, Makefile
int DModuleFunction1 (int a)
{
printf («Estoy en DModuleFunction1 y su valor:% d», a);
a = a + FUNC_VALUE4;
retorno (a);
}
int DModuleFunction2 (int b)
{
printf («Estoy en DModuleFunction2 y su valor:% d», b);
b = b + FUNC_VALUE5;
retorno (b);
}
int DModuleFunction3 (int c)
{
printf («Estoy en DModuleFunction3 y su valor:% d», c);
c = c + FUNC_VALUE6;
return (c);
}
# include
# define FUNC_VALUE6 13
CC = gcc />
# define parámetros del compilador «CFLAGS» si la opción que-g es para el IAE, de la pared para mostrar todos
CFLAGS =-g-Wall
A # include para incluir los directorios dan Directorio -I/Path
# ej: includedir = -I/VOBS/CMODULE / INC /, para incluir una mayor directorio
# Sintaxis entonces será includedir + = -I/VOBS/CMODULE/INC /
# Includedir = -I/VOBS/BMODULE/INC /
includedir = -I/root/mreddya/MAKEFILE_EXERCISE/DMODULE/inc
# define MACRO para diretory OBJETO
OBJS = $ (OBJ-DIR) / dModulefile1.o
$ (OBJ-DIR) / dModulefile2.o
$ (OBJ-DIR) / dModulefile3.o
# Primero siempre damos Marca, se trata aquí, y la hora de OBJS
# Luego Se comprobará qué y todos o se necesitan de
# y luego el tope de comandos para generar el o
# Generar la biblioteca
; ar-qcs libDmodule.a $ (OBJS)
# target (Narra $ . (OBJ-DIR) /% s:…% c, generar el% archivos de C # o de archivos mediante comandos)
# Para.. conseguir el objetivo el siguiente comando debería ser ejecutado,
.. , $ (CC) $ (CFLAGS) $ (includedir) -c $ <-o $ @
limpia:
;. rm-f $ (OBJ-DIR) / * s
rm .-f * a
/ root / mreddya / MAKEFILE_EXERCISE / DMODULE / src
gcc-g-Wall -I/root/mreddya/MAKEFILE_EXERCISE/DMODULE/inc-c dModulefile2.c-o / root / mreddya / MAKEFILE_EXERCISE / DMODULE/obj/dModulefile2.o
gcc-g-Wall -I/root/mreddya/MAKEFILE_EXERCISE/DMODULE/inc-c dModulefile3.c-o / root/mreddya/MAKEFILE_EXERCISE/DMODULE/obj/dModulefile3.o
ar-qcs libDmodule.a / root/mreddya/MAKEFILE_EXERCISE/DMODULE/obj/dModulefile1.o / root/mreddya/MAKEFILE_EXERCISE/DMODULE/obj/dModulefile2.o / root/mreddya/MAKEFILE_EXERCISE/DMODULE/obj/dModulefile3. o
pwd / root / mreddya / MAKEFILE_EXERCISE / DMODULE / obj
dModulefile1.o dModulefile2.o dModulefile3.o