[C con Clase] Linking!!!

Programante programante en gmail.com
Vie Jun 8 00:12:19 CEST 2007


Zakariae El-Abdelouarti Alouaret escribió:
> Tengo un proyecto que estoy desarrollando con gcc y makefile.
> La cuestión es que hay varias clases con sus respectivos archivos fuente 
> y cabeceras.
> Quiero saber si es lo mismo poner
> #include "nombre_de_una_clase.h"
> #include "nombre_de_una_clase.cpp"
>
> que poner lo siguiente
> #include "nombre_de_una_clase.h"
>
> y luego al compilar poner el siguiente comando en gcc
>
> g++ -lnombre_de_la_clase
>
> En definitiva y a donde quiero ir a parar es: ¿Cómo establezco las 
> relaciones de dependencia de forma dinámica para que así además no tenga 
> que recompilar todo el código de todas las clases?.
> (Se que make juega un papel muy importante a este respecto, pero primero 
> quiero entender lo que hace el compilador)
>
> Gracias por vuestra ayuda.
>
> Zaka.
En el primer caso en cada fichero en que uses la clase, te copiará y 
compilará la implementación.

En el segundo caso, el código se compila una vez, usándose el mismo en 
todos los archivos.
No obstante, creo que lo que quieres hacer es
g++ -c nombre_de_la_clase.cpp -o nombre_de_la_clase.o
g++ <archivos> nombre_de_la_clase.o

Con -l sería si lo conviertes en una librería estática, lo cual 
probablemente no te merezca la pena.

Lo correcto es usar el segundo método, donde cada código se compila sólo 
una vez. Además, de no
hacerlo así podrías obtener errores de enlazado si en algun archivo 
intentas usar el primer método
(pues tendría muchas copias del código).
La excepción es cuando la clase está templatizada, donde tienes que 
incluirlo.

Para no tener que recompilar el código de todas las clases, creas el .o 
de cada una de ellas, actualizándolos
cuando los modificas y reenlazas
g++ archivo1.o archivo2.o archivo3.o ... -o ejecutable.exe
Como ya adelantas, make lo que hace es detectar cuando has cambiado el 
.cpp de un .o para generar de
nuevo el .o





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