2009-05-17 12 views
14

In Unix, ho tre file principali. Uno di questi è una libreria e l'altro è un programma.Collegamento di variabili esterne in C

  • MyLib.c e MyLib.h sono la libreria.
  • main.c è il programma.

In MyLib.h Ho una dichiarazione (extern int Variable;). Quando cerco di usare Variable in main.c non posso. Ovviamente ho incluso MyLib.h in MyLib.c e in main.c e li linko anch'io. Ad ogni modo la variabile non viene riconosciuta in main.c.

Come si ottiene la variabile disponibile quando collego il programma?

+0

Si prega di inviare la fonte e l'errore . In particolare, come sei riuscito a collegarti quando non puoi nemmeno costruire main.c? – Macker

+0

Avevo un main.c overthere e stavo solo cercando di capire come funzionano il compilatore e il linker. Ma la risposta di Chris Lutz funzionava. Grazie. –

risposta

29

Variable deve essere definito da qualche parte. Lo dichiarerei come variabile globale in MyLib.c e quindi lo dichiarerei solo come extern in main.c.

Quello che sta accadendo è che, sia per MyLib.c e main.c, il compilatore è stato detto che Variable esiste ed è un int, ma che è da qualche altra parte (extern). Che va bene, ma in realtà deve essere da qualche altra parte, e quando il tuo linker cerca di collegare tutti i file insieme, non è in grado di trovare Variable in realtà da nessuna parte, quindi ti dice che non esiste.

Prova questo:

MyLib.c:

int Variable; 

mylib.h:

extern int Variable; 

main.c:

#include "MyLib.h" 

int main(void) 
{ 
    Variable = 10; 
    printf("%d\n", Variable); 
    return 0; 
} 
+0

Grazie, ho appena capito. –

+0

Nessun problema. Le numerose fasi di compilazione possono essere piuttosto confuse all'inizio. –

+0

@Chris Lutz buona spiegazione. 1+ per te :) – mahesh

Problemi correlati