2010-05-08 5 views
-1

J'implémente une liste de liens dans deux fichiers dans linklist.h et linklist.c, et j'appelle certaines fonctions définies dans linklist.h dans la fonction principale de main.c. linklist.h est inclus dans linklist.c et main.c. Lorsque je compile ce programme par GCC avec Makefile, l'erreur nommée "référence non définie à xxx" se produit. Je pense que mon Makefile est écrit correctement comme ci-dessous. Quelle est la raison possible de cette erreur de liaison?Référence non définie à "func" lors de la compilation avec GCC

CC=gcc 

CFLAGS= -g -O2 

TARGET=target 

OBJECTS=main.o linklist.o 

TARGET: $(OBJECTS) 

$(CC) $(CFLAGS) $(OBJECTS) -o $(TARGET) 

clean: 

rm target $(OBJECTS) 

main.o:linklist.h 

linklist.o:linklist.h 
+0

Je ne sais pas beaucoup de choses sur makefiles, mais ne devrait-on pas mentionner 'linklist.c' et' main.c' quelque part, à part les fichiers d'en-tête? – stakx

+0

Non, il suffit de nommer les fichiers objets. Make sait quels fichiers C sont associés aux fichiers objets à partir de ses règles d'inférence. – Jens

Répondre

1

Le makefile semble OK.

Examinez attentivement les orthographes du nom de la fonction signalé par l'éditeur de liens et des noms dans le code source.

Vérifiez si la fonction est déclarée statique dans linklist.c; si c'est le cas, il n'est pas disponible dans main.c.

Sinon, nous aurons probablement besoin de voir votre code et l'erreur réelle.

+0

merci, je vérifie le code source à nouveau, l'orthographe du nom de la fonction est un peu différente dans linklist.c et linklist.h, donc c'est la cause première tout comme ce que vous avez mentionné – user335840

Questions connexes