2009-05-17 29 views
14

En Unix, tengo tres archivos principales. Uno de ellos es una biblioteca y el otro es un programa.Vinculación de variables externas en C

  • MyLib.c y MyLib.h son la biblioteca.
  • main.c es el programa.

En MyLib.h Tengo una declaración (extern int Variable;). Cuando trato de usar Variable en main.c no puedo. Por supuesto que he incluido MyLib.h en MyLib.c y en main.c, y los vinculo también. De todos modos, la variable no se reconoce en main.c.

¿Cómo obtengo la variable disponible cuando vinculo el programa?

+0

Por favor enviar la fuente y el error . En particular, ¿cómo has logrado vincular cuando ni siquiera puedes compilar main.c? – Macker

+0

Tenía un main.c aquí, y estaba tratando de entender cómo funcionan el compilador y el enlazador. Pero la respuesta de Chris Lutz funcionó. Gracias. –

Respuesta

29

Variable debe definirse en algún lugar. Lo declararía como una variable global en MyLib.c, y luego solo lo declararía como extern en main.c.

Lo que ocurre es que, por tanto MyLib.c y main.c, se le dice al compilador que Variable existe y es un int, pero que es en otro lugar (extern). Lo cual está bien, pero luego tiene que estar en otro lugar, y cuando su enlazador intenta vincular todos los archivos, no puede encontrar que Variable esté realmente en ninguna parte, por lo que le dice que no existe.

Prueba esto:

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

Gracias, acabo de entender. –

+0

No hay problema. Las numerosas etapas de compilación pueden ser bastante confusas al principio. –

+0

@Chris Lutz buena explicación. 1+ para ti :) – mahesh