Estoy tratando de usar flex y bison para crear un lenguaje de scripting simple. En este momento, solo estoy tratando de hacer funcionar una calculadora.Referencia no definida a 'yylex()'
No puedo hacer que compile, sin embargo. Cuando ejecuto este 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] $<
en mis archivos y .L .ypp, me sale este error:
undefined reference to `yylex()'
Y si hago el comando para all
así:
$(CPP) $^ -o $(PROGRAM) -lfl
dice que no pudo encontrar -lfl
. Y si lo hago de esta manera:
$(CPP) $^ -o -lfl $(PROGRAM)
que se remonta al error undefined reference
.
Lo siento, no tengo ni idea de esto.
EDITAR: Tengo Flex instalado. Traté de cambiarlo de -lfl a C: /GnuWin32/lib/libfl.a (estoy tratando de usar Windows porque Linux tiene problemas extraños en mis computadoras y aún no tengo una Mac), pero todavía tiene el mismo error.
Es necesario leer la documentación del compilador de C/C++ que está utilizando. "-o" es una opción que produce un archivo de salida; el siguiente argumento debe especificar el nombre de ese archivo. "-l" especifica una biblioteca; la documentación le indicará la convención de nombres y la ubicación donde el compilador buscará esta biblioteca. Como una suposición, no ha instalado la biblioteca flexible. – kdgregory
tengo el mismo problema. Mi programa está compilando con gcc, problema con la versión de g ++. – Dilawar