c extern undefined reference [duplikat]
Przepraszam za to, co na pewno jest prostym błędem. Ale po kilku godzinach nie wiem, co robię źle. Rozumiem, że externnależy to zadeklarować poza funkcją i zdefiniować w funkcji. Ale nie mogę zmusić tego do pracy.
Oto mój minimalny błąd kodu.
extern double d;
int main(void) {
d = 0;
return 0;
}
/home/0KzRYK/ccCTD3Lf.o: In function `main': prog.c:(.text.startup+0x3): undefined reference to `d' collect2: error: ld returned 1 exit status
Odpowiedzi
Dziękuję wszystkim za komentarze. Moim błędem było założenie, że extern double ddefiniuje zmienną w taki sam sposób, jak double d. Ale najwyraźniej tak nie jest.
Powiedziałbym, że jest to nieintuicyjna właściwość języka, przynajmniej dla początkującego (np. extern doubleNie jest definicją, ale static doublejest).
Po twoich komentarzach znalazłem powiązane pytanie, które dokładnie o tym mówi: Dlaczego tworzenie zmiennej za pomocą „extern” jest deklaracją, a nie definicją?
Twoje rozumienie jest błędne. Zmienne z externnie muszą być definiowane w ramach funkcji. Ale musi być gdzieś zdefiniowany (może inny plik źródłowy).
Przykład:
main.c:
extern double d;
int main(void) {
d = 0;
return 0;
}
d.c:
double d;
kompilacja:
gcc -o main main.c d.c