2009-05-17 10 views
14

W systemie Unix mam trzy główne pliki. Jedną z nich jest biblioteka, a druga to program.Łączenie zmiennych zewnętrznych w C

  • MyLib.c i MyLib.h są biblioteką.
  • main.c to program.

W MyLib.h Mam deklarację (extern int Variable;). Gdy próbuję użyć Variable w main.c, nie mogę. Oczywiście dodałem MyLib.h w MyLib.c i main.c, a także je łączę. W każdym razie zmienna nie jest rozpoznawana w main.c.

Jak uzyskać zmienną dostępną po połączeniu programu?

+0

proszę pisać źródłem i błąd . W szczególności, w jaki sposób udało ci się połączyć, gdy nie możesz nawet zbudować main.c? – Macker

+0

Miałem main.c overthere, a ja tylko próbowałem zrozumieć, jak działa kompilator i linker. Ale odpowiedź Chrisa Lutza zadziałała. Dzięki. –

Odpowiedz

29

Variable musi być gdzieś zdefiniowany. Chciałbym zadeklarować to jako zmienną globalną w MyLib.c, a następnie zadeklarować ją jako extern w main.c.

Co się dzieje jest to, że zarówno MyLib.c i main.c, kompilator jest powiedziano, że Variable istnieje i jest int, ale że jest to gdzieś indziej (extern). Co jest w porządku, ale wtedy musi być gdzie indziej, a kiedy twój linker próbuje połączyć wszystkie pliki razem, nie może znaleźć gdziekolwiek indziej, więc mówi, że nie istnieje.

Spróbuj tego:

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

Dziękuję, właśnie zrozumiałem. –

+0

Bez problemu. Liczne etapy kompilacji mogą początkowo być dość mylące. –

+0

@ Chris Lutz dobre wyjaśnienie. 1+ dla Ciebie :) – mahesh

Powiązane problemy