[C con Clase] Compilacion de programas desde varios fuentes

Steven Richard Davidson stevenrichard.davidson en gmail.com
Vie Ago 31 17:20:31 CEST 2007


Hola Richard,

On 8/31/07, richard sandes <richard.sandes en gmail.com> wrote:
>
>
> Estimados,
> mi duda es la siguiente.
> Yo tengo varios archivos fuentes, suponemos:
>
> Arbol.h,Arbol.cpp
>
> Lista.h,Lista.cpp
>
> Pila.h, Pila.cpp.
>
> y mi programa principal "programa1".
>
> Bien, para compilar "programa1" lo que tengo que hacer es:?
> (desde cygwin, es)
>
>
> gcc Arbol.cpp -o Arbol.o
> gcc Lista.cpp -o Lista.o
> gcc Pila.cpp -o Pila.o
> gcc programa1.cpp ....//de aqui en adelante como sigo si son tres TAD
> independienteis?
>

Bueno, el término TAD (o TDA) no tiene nada que ver con la
compilación, sino con conceptos de programación.

En cuanto a la compilación, puedes compilar cada fichero fuente
independientemente, ejecutando "gcc" para cada fichero fuente. Luego,
tendrías que enlazar (link, en inglés) cada fichero objeto ".o"
creando un fichero ejecutable, que por defecto se llama "a.out". Por
ejemplo,

host> gcc programa1.cpp -o programa1.o
host> gcc Arbol.o Lista.o Pila.o programa1.o -o programa1

Ahora el fichero "programa1" es ejecutable. En este ejemplo, hemos
usado "gcc" para realizar el enlace, aunque internamente ejecutará el
enlazador, que típicamente se llama "ld". Por lo tanto, podríamos usar
"ld" directamente para hacer el enlace.

Sugiero usar "gcc" para hacer todo el proceso, y así no tienes que
estar ejecutando "gcc" cada dos por tres. Sencillamente, esto sería,

host> gcc Arbol.cpp Lista.cpp Pila.cpp programa1.cpp -o programa1

Con esto, "gcc" realizará la compilación y el enlace.

> Y si fueran dependientes, por ejemplo que Lista utiliza el TAD Arbol, como
> se compilarian estos?
>

La compilación siempre se hace independientemente para cada fichero
fuente. Ahora bien, el enlace es algo diferente, ya que requiere los
ficheros objetos que contienen las implementaciones, especialmente si
vas a generar un fichero ejecutable.

La compilación anterior funcionará sólo si "programa1.c" es el único
fichero fuente que contiene la función 'main()'. De lo contrario, el
enlazador nos dará problemas, porque sólo puede haber una función
'main()' en un fichero ejecutable.


Espero haber aclarado el asunto.

Steven




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