[C con Clase] parametro -l

Steven Davidson srd4121 en njit.edu
Vie Abr 9 17:41:34 CEST 2010


Hola Halowin,

halowin wrote:
> Hola a todos.
> Me creado una pequeña libreria para hacer pruebas y funciona
> perfectamente, pero resulta que a la hora de compilar tengo que
> poner:
> 
> gcc pruebas.c -o pruebas -lmia
> 
> habiendo creado la libreria con el nombre "libmia", tambien creé un
> .h de cabecera pero que no lo puedo poner como include porque no "ve"
> las funciones que hay dentro definidas.
> 
> Me pregunto:
> ¿Cual es la diferencia entre poner mi libreria en un include o tener
> que linkarla explicitamente con -l?
> 
> Posiblemente ya esté espluicado pero no lo he encontrado con el
> buscador, si ya existiera respuesta pido disculpas.
> 

Programante ya te ha contestado, pero quería agregar a lo que ha dicho.

El fichero de cabecera no contiene las definiciones de las funciones, 
sino las declaraciones: los ptototipos. Piensa que el fichero de 
cabecera es código C++ para el compilador, mientras que la biblioteca 
"libmia.a" contiene código máquina en binario para que el enlazador 
realice su tarea.

Tienes que satisfacer las necesidades de ambas herramientas:
1. ".h" para el compilador, y
2. ".a" (o ".lib") para el enlazador

Esto es lógico, ya que el compilador necesita saber que lo que estás 
usando en tu programa. Recuerda que C++ es un lenguaje fuertemente 
tipificado. Esto significa que el compilador siempre debe saber el tipo 
de las entidades que usas. En el caso de las funciones, el compilador no 
necesita saber su implementación.


Espero que esto ayude a aclarar el tema.

Steven





Más información sobre la lista de distribución Cconclase