2012-06-30 20 views
9

Tengo algunos problemas para compilar algunos archivos usando encabezados. Esta es una composición de mi código:"Referencia no definida a la función" error

Archivo1.c

#include "header.h" 
int main() { 
    func1(); 
    return 0; 
} 

Archivo2.c

#include "header.h" 
void func1() { 
    ... function implementation ... 
} 

header.h

void func1(); 


El error que estoy consiguiendo es:

En función 'main':
referencia indefinida a 'func1'

Nota: Estoy usando un simple resumen de cómo mis 3 archivos se instalan. Necesito que esto funcione con los 3 archivos. Estoy configurando/incluyendo todo correctamente? Necesito usar esta configuración, pero no estoy seguro de cómo file.c obtiene referencia de la implementación real de func1().

+2

¿qué compilador estás usando? ¿Puedes proporcionar tu declaración de compilación? – mathematician1975

+3

Si está utilizando 'gcc -o programa archivo2.c archivo1.c', cambie esto a' gcc -o programa archivo1.c archivo2.c'. El orden es importante. –

+0

Hmm, tienes derecho a que esto funcione en la compilación normal de gcc. El problema es que este problema para más es de un proyecto muy grande, con cientos de archivos. Pero la estructura del problema es la misma. Pensé que tal vez no estaba incluyendo las cosas correctamente, pero supongo que ese no es el caso. – Tesla

Respuesta

4

Si el error es una referencia indefinida a func1(), y no hay otro error, entonces yo creo que es porque tiene dos archivos llamados header.h en su proyecto y la otra copia se está incluyendo en lugar de su copia con la declaración de func1().

Verificaría las rutas de inclusión para su proyecto y me aseguraré de que se incluya primero el header.h con su declaración de func1().

+0

Esto es tan viejo, pero me estoy encontrando con el problema y agradecería su ayuda. La configuración básica es la misma que esta pregunta, excepto que estoy seguro de que se está incluyendo el encabezado correcto, porque algunas funciones no dan referencias indefinidas y algunas lo hacen. Es extraño, y si pongo en peligro el encabezado, entonces el código "correctamente" no se compila. –

Cuestiones relacionadas