2014-04-29 20 views
6

cerco di dichiarare una variabile globale config:C: undefined riferimento ad una variabile quando si utilizza extern

//general.h 

struct config_t { 
    int num; 
}; 

extern struct config_t config; //The global variable 

Poi ho definire variabile config nella general.c:

//general.c 
#include "general.h" 

struct config_t config = { 
    num = 5; 
}; 

Ma, quando cerco di utilizzare la variabile globale 'config' nella mia funzione principale, viene visualizzato l'errore:

undefined reference to `config': 

Programma principale:

//main.c 
#include "general.h" 

main() { 
    config.num = 10; 
} 

Perché è?

+0

Si riceve questo errore durante la compilazione o durante il collegamento? –

+0

@SergeyL. - Durante il collegamento – Halona

+0

Per evitare errori del linker, _always_ use _header guards_ '#ifndef MY_HEADER_H #define MY_HEADER_H/* contents */# endif'. Devi _ avere questo in ogni file di intestazione che tu abbia mai fatto. – Lundin

risposta

7

Questo sembra un errore del linker. È necessario assicurarsi di collegare il vostro eseguibile corretto:

cc -c general.c 
cc -c main.c 
cc general.o main.o 
./a.out 

La bandiera -c istruisce il compilatore di non collegare ancora. Al fine di collegare il file oggetto contenente config deve essere disponibile in quel momento.

Problemi correlati