[Programación] Re: [Programación] headers .h

Federico Wiecko programacion@lugro.org.ar
28 Oct 2003 16:45:32 -0300


A ver.......los headers (.h) se utilizan principalmente para definir
tipos de datos y funciones de interface definidas en alguna libreria o
un binario.

Si compilas estaticamente las librerias y/o binarios en un aplicacion,
para ser mas claro incluis al compilar todos los *.o *.a , tu binario va
a contener todas las definiones de las funciones asi las utilice o no. 

Ahora bien, existen lo que se llaman librerias dinamicas, las lib*.so
que por ejemplo podes encontrar /lib, /usr/lib , que solo se cargan
dinamicamente por demanda. Esto significa que cuando haces una llamada a
una funcion de dicha libreria si no esta no estaba en memoria entonces
el loader las levanta automaticamente. Una gran ventaja de usar
librerias dinamicas es que es posible mantener una unica copia en
memoria de la libreria aunque haya varios binarios que la estan
"usando".

Para darte un ejemplo mas concreto:

cuando haces gcc -lz -o pp pp.c

estas incluyendo dinamicamente la libz.so 
y el codigo de la libz no se agrega al de pp, solo se agrega una
referencia en el ELF (formato del binario) que indica que las llamadas a
determinadas funciones deben ser buscadas en determinada libreria. 

Para saber que librerias dinamicas utiliza un binario podes probar por
ejemplo: 

   ldd /bin/bash
   libncurses.so.5 => /lib/libncurses.so.5 (0x40021000)
   libdl.so.2 => /lib/libdl.so.2 (0x4005d000)
   libc.so.6 => /lib/libc.so.6 (0x40060000)
   /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)


Espero haber sido suficientemente claro,

Federico :-

El mar, 28-10-2003 a las 15:05, Hernan (HHDG) escribió:
> Hice un programa que usa varios archivos .h, que tambien hice yo, osea son
> como librerias de funciones, mi pregunta es la siguiente:
> Si el programa NO utiliza alguna de las funciones que figuran en el .h
> incluido
> estas son compiladas igual? o el linker detecta que nunca son llamadas y
> el codigo final no las tiene?...
> 
> Gracias
> 
> PD: en caso de que las compile (cosa que ocuparía espacio innecesario) hay
> forma de que no las compile?
> Gracias
> _______________________________________________
> Programacion mailing list
> Programacion@lugro.org.ar
> http://www.lugro.org.ar/mailman/listinfo/programacion
>