mingw32/bin/ld.exe:找不到 -lfl collect2.exe:错误:ld 返回 1 个退出状态



我正在尝试从Windows上的Github执行FLEX程序,并且我已经安装了FlexMingW编译器。

我在下面添加了环境变量的路径

  1. C:\MinGW\bin
  2. C:\MinGW\msys\1.0\bin

之后,我尝试执行make命令,并得到以下输出

g++ -g -Wall -ansi -pedantic -std=gnu++0x bison.o lex.o main.o -o mini_lang -lfl
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lfl
collect2.exe: error: ld returned 1 exit status
make: *** [mini_lang] Error 1

以下是Makefile

OBJ = bison.o lex.o main.o
CC = g++
CFLAGS = -g -Wall -ansi -pedantic -std=gnu++0x
mini_lang:$(OBJ)
    $(CC) $(CFLAGS) $(OBJ) -o mini_lang -lfl
lex.o: lex.c
    $(CC) $(CFLAGS) -c lex.c -o lex.o
lex.c: lex_final.l
    flex lex_final.l
    cp lex.yy.c lex.c
bison.o: bison.c
    $(CC) $(CFLAGS) -c bison.c -o bison.o
bison.c: grammar.y
    bison -d -v grammar.y
    cp grammar.tab.c bison.c
    cmp -s grammar.tab.h tok.h || cp grammar.tab.h tok.h
main.o: main.cc
    $(CC) $(CFLAGS) -c main.cc -o main.o
lex.o yac.o main.o: headers.h
lex.o main.o: tok.h

clean:
    rm -f *.o *~ lex.c lex.yy.c bison.c tok.h grammar.tab.c grammar.tab.h grammar.output mini_lang

拜托,任何人都可以帮我解决此错误吗?

我的建议是找到一个不同的教程。

您安装的 Flex 发行版不包含libfl或者您没有将路径添加到正确的环境变量libfl。您可以尝试将路径显式添加到 minilang 规则中,在 -lfl... -L /path/to/directory-containinglibfl -lfl 之前使用 -L 选项。

但是,绝对不需要 -lfl ,因此更好的解决方案是将其从minilang操作中删除,然后添加

%option noyywrap

到您的弹性输入文件。(这将阻止它产生调用yywrap的扫描仪,因此您将不需要libfl中的yywrap

如果您使用 MinGW 编译器,请打开 InstallManager 并安装此软件包:

mingw32-pthreads-w32

我正在使用MingW + MSYS2,对我来说,Flex库位于c:msys32usrliblibfl.a

尝试在 MinGW 文件夹树中搜索libfl.a,并使用-L编译器/链接器标志,后跟库所在的文件夹路径,指示编译器/链接器在该位置查找libfl.a

例如:

g++ -g -Wall -ansi -pedantic -std=gnu++0x bison.o lex.o main.o -o mini_lang -lfl -Lc:msys32usrlib

最新更新