Undefined reference to 'yylex()'
Je suis en train d'utiliser flex et bison pour créer un langage de script simple. Maintenant, je suis juste essayer d'obtenir une calculatrice de travail.
Je n'arrive pas à compiler. Lorsque j'exécute ce fichier makefile:
OBJECTS = hug.tab.o hug.yy.o
PROGRAM = hug.exe
CPP = g++
LEX = flex
YACC = bison
.PHONY: all clean
all: $(OBJECTS)
$(CPP) $^ -o $(PROGRAM)
clean:
$(RM) *.o *.output *.tab.* *.yy.* $(PROGRAM)
%.tab.o: %.tab.cpp
$(CPP) -c -o $@ $<
%.tab.cpp: %.ypp
$(YACC) -vd $<
%.yy.o: %.yy.c
$(CPP) -c -o $@ $<
%.yy.c: %.l
$(LEX) -o $@ $<
%.o: %.cpp
$(CPP) -c -o $@ $<
sur mon .l et .ppj fichiers, j'obtiens cette erreur:
undefined reference to `yylex()'
Et si je fais la commande pour all
comme ceci:
$(CPP) $^ -o $(PROGRAM) -lfl
il dit qu'il ne pouvait pas trouver -lfl
. Et si je fais comme ceci:
$(CPP) $^ -o -lfl $(PROGRAM)
il va revenir à la undefined reference
erreur.
Désolé, je suis un peu paumé sur ce.
EDIT: j'ai flex installé. J'ai essayé de changer de -lfl à C:/GnuWin32/lib/libfl.a (je suis en train d'utiliser Windows car Linux a des problèmes bizarres sur mon ordinateur et je n'ai pas de Mac pour le moment), mais il a toujours la même erreur.
j'obtiens le même problème. Mon programme est en train de compiler avec gcc, problème avec g++ version.
OriginalL'auteur Micah | 2009-09-26
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est que vous êtes à la compilation des hug.aa.c avec g++ (en le traitant comme C++) au lieu de gcc. C'est le fichier qui définit
yylex
, par le compiler en C++, vous vous retrouvez avec un C++ la fonction yylex tandis que les autres fichiers sont à la recherche pour un C de la fonction yylex.Essayez de rester
extern "C" int yylex();
dans la première section de votre étreinte.l fichier afin qu'il utilise une liaison C pour yylex au lieu de C++OriginalL'auteur Chris Dodd
avez-vous installé la bibliothèque flex ? si oui, essayez quelque chose comme
OriginalL'auteur Nadir SOUALEM
J'ai ajouté mon fichier avec ce.
Maintenant il me donne une erreur de segmentation, mais je peux le faire liés.
OriginalL'auteur Dilawar