Tengo este problema donde el compilador de GCC parece estar fallando cuando se trata de vincular dos archivos de objetos que tengo juntos. Ambos archivos de objeto foo1.cc
y foo2.cc
incluyen clases de un archivo de encabezado llamado foo1.hh
. Además, el archivo de encabezado foo.hh
tiene como una declaración externa de una instancia de objeto que aparece en foo1.cc
.¿Cómo compilar y vincular archivos de objeto en C++ usando el mismo archivo de encabezado?
Se debe tener en cuenta que el archivo de encabezado foo.hh
solo se definirá una vez entre los dos archivos de origen foo1.cc
y foo2.cc
.
Cuando puedo compilar los archivos de código fuente utilizando el siguiente comando, todo parece funcionar:
g++ foo1.cc foo2.cc
El comando anterior producirá un ejecutable llamado a.out
.
Cuando intento compilar los archivos de origen en los ficheros objeto independiente:
g++ -c foo1.cc
g++ -c foo2.cc
g++ -o foo1.o foo2.o
El compilador GCC se queja de que hay referencias indefinidas a funciones en foo2.cc
. Estas funciones deben definirse en foo1.cc
; sin embargo, el enlazador no reconoce eso.
Me preguntaba si había una forma de evitar este problema con el compilador de GCC.
Bienvenido a SO! Asegúrese de aceptar la respuesta más útil. – jncraton
debes aceptar una respuesta. – Walter