J'essaie d'utiliser flex et bison pour créer un langage de script simple. En ce moment, j'essaie juste de faire fonctionner une calculatrice.Référence non définie à 'yylex()'
Je ne peux pas le compiler, cependant. Quand je lance ce 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 [email protected] $<
%.tab.cpp: %.ypp
$(YACC) -vd $<
%.yy.o: %.yy.c
$(CPP) -c -o [email protected] $<
%.yy.c: %.l
$(LEX) -o [email protected] $<
%.o: %.cpp
$(CPP) -c -o [email protected] $<
sur mes .L et les fichiers .ypp, je reçois cette erreur:
undefined reference to `yylex()'
Et si je fais la commande pour all
comme ceci:
$(CPP) $^ -o $(PROGRAM) -lfl
il dit qu'il n'a pas pu trouver -lfl
. Et si je fais comme ceci:
$(CPP) $^ -o -lfl $(PROGRAM)
il remonte à l'erreur undefined reference
. Désolé, je suis un peu ignorant à ce sujet.
EDIT: J'ai installé flex. J'ai essayé de le changer de -lfl à C: /GnuWin32/lib/libfl.a (J'essaie d'utiliser Windows parce que Linux a des problèmes bizarres sur mes ordinateurs et je n'ai pas encore de Mac), mais il a toujours le même erreur.
C++ Vous devez lire la documentation pour le C/C++ compilateur que vous utilisez. "-o" est une option qui produit un fichier de sortie; l'argument suivant doit spécifier le nom de ce fichier. "-l" spécifie une bibliothèque; La documentation vous indiquera la convention de nommage et l'emplacement où le compilateur recherchera cette bibliothèque. En guise d'estimation, vous n'avez pas installé la bibliothèque Flex. – kdgregory
Je reçois le même problème. Mon programme compile avec gcc, problème avec la version g ++. – Dilawar