2012-06-30 6 views
9

Mam problem z kompilacją kilku plików przy użyciu nagłówków. Oto podział mojego kodu:Błąd "Niezdefiniowane odniesienie do funkcji"

file1.c

#include "header.h" 
int main() { 
    func1(); 
    return 0; 
} 

file2.c

#include "header.h" 
void func1() { 
    ... function implementation ... 
} 

header.h

void func1(); 


Błąd otrzymuję to:

W funkcji 'main':
niezdefiniowana odniesienia do 'func1'

Uwaga: jestem po prostu za pomocą prostego podziału jak moje 3 pliki są ustawione. Muszę uruchomić to z 3 plikami. Ustawiam/włączam wszystko poprawnie? Muszę użyć tej konfiguracji, ale nie jestem pewien, jak plik file.c uzyskuje odwołanie do faktycznej implementacji func1().

+2

jakiego kompilatora używasz? czy możesz podać swoją instrukcję kompilatora? – mathematician1975

+3

Jeśli używasz 'gcc -o program file2.c plik1.c', zmień to na' gcc -o program plik1.c plik2.c'. Zamówienie jest ważne. –

+0

Hmm, twoje prawo, że to powinno działać pod normalną kompilacją gcc. Problem polega na tym, że ta kwestia na więcej pochodzi z bardzo dużego projektu, z setkami plików. Ale struktura problemu jest taka sama. Pomyślałem, że może nie włączyłem rzeczy właściwie, ale myślę, że tak nie jest. – Tesla

Odpowiedz

4

Jeśli błąd jest niezdefiniowana odniesienia do func1(), i nie ma żadnego innego błędu, wtedy myślę, że to dlatego, że masz dwa pliki o nazwie header.h w projekcie, a druga kopia jest włączone zamiast kopii z deklaracja func1().

Chciałbym sprawdzić ścieżki dołączania do twojego projektu i upewnić się, że header.h z Twoją deklaracją func1() jest uwzględniane jako pierwsze.

+0

To jest bardzo stare, ale mam problem i będę wdzięczny za pomoc. Podstawowa konfiguracja jest taka sama, jak to pytanie, ale jestem pewien, że dołączony jest poprawny nagłówek, ponieważ niektóre funkcje nie dają niezdefiniowanych odniesień, a niektóre nie. To dziwne, a jeśli zagroziłbym nagłówkowi, kod "poprawnie" się nie skompilował. –