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.

Vous avez besoin de lire la documentation du compilateur C/C++ que vous utilisez. "-o" est une option qui produit un fichier de sortie; la très prochaine argument doit spécifier le nom de ce fichier. "-l" indique une bibliothèque; la documentation va vous dire la convention de nommage et de l'endroit où le compilateur va chercher cette bibliothèque. Comme une supposition, vous n'avez pas installé la bibliothèque flex.
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