12

嗨,我正在学习 Lex 和 yacc。我创建了以下 lex 程序。

%{
#include <stdio.h>
%}

%%
[0123456789]+           printf("NUMBER\n");
[a-zA-Z][a-zA-Z0-9]*    printf("WORD\n");
%%

我正在尝试使用以下命令运行它:

  1. 法例1.l
  2. cc lex.yy.c -o example1 -ll

也试过 cc lex.yy.c -o example1 -lfl

当我输入上面的第二个命令表单时,我收到错误:

D:\workdir\flexyacc\Test3>gcc lex.yy.c -o Test -lfl
C:\Dev-Cpp\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -lfl
collect2: ld returned 1 exit status

我试着用谷歌搜索这个错误,但到目前为止没有运气。因为我是 Lex 编程的新手,所以我不明白如何解决这个问题。任何帮助将不胜感激。非常感谢。

4

8 回答 8

9

如果您使用的是 lex + yacc,则可以在定义 yywrap 函数或使用 noyywrap 选项时删除 -lfl :

%option noyywrap
%%
 ...
%%
于 2015-02-03T14:12:03.070 回答
7

要编译 lex 代码,首先你应该在你的机器上安装 flex。如果是这样,就会有一个文件 libfl.a。在我的机器上,我在 'C:\GnuWin32\lib' 中安装了 flex

gcc lex.yy.c -L"C:\GnuWin32\lib" -lfl

于 2013-04-05T21:42:35.683 回答
6

我遇到了同样的问题,所以我在互联网上检查了一下,并通过工作验证码找到了一个解决方案,发布于 2011 年 6 月 3 日下午 6:44在这里

他说:

您可以添加此函数并正常编译

yywrap()
{
}

所以我在 main 函数之前提供了 .lex 文件中的代码。这样做之后,它以它应该的方式解决了:)

于 2012-09-07T11:42:54.287 回答
2

我在使用 MinGW 将 TXR 移植到 Windows 时遇到了这个问题。

MinGW 自己有一个 flex 库,但不会将其导出到环境中。

见这里: http: //lists.nongnu.org/archive/html/txr-users/2011-10/msg00001.html

解决方法是使用-L/usr/libbefore -lfl。但想想这个:这是一个黑客。为什么?因为路径/usr/lib/属于MinGW,编译环境的运行时。

/usr/lib不是工具链应该为正在构建的 Windows 程序找到库的位置(它不在库搜索路径中!)

也就是说,我们在交叉编译作业中有效地窃取了构建机器的本机库。

这就像如果您在 Ubuntu 上交叉编译 Fedora 程序,并帮助自己/usr/lib使用 Fedora 交叉工具链中恰好缺少的 Ubuntu 静态库(利用架构和目标文件格式发生的事实相同)。

这绝对是 Flex 在 MingW 中“打包”的方式中的一个错误。

于 2012-04-16T23:16:22.737 回答
2

在尝试解决与您相同的问题后,我安装了 flex-old:

sudo apt install flex-old

于 2019-04-06T11:54:49.950 回答
1

如果您使用的是 macOSX,请替换-lfl-ll

于 2021-02-23T06:56:04.057 回答
1

尝试在 gcc 中使用-ll而不是-lfl

于 2019-11-15T21:55:33.890 回答
0

对于错误: cannot find -lflx

在您的 Makefile 更改: LEXLIB = -lflLEXLIB =.

否则删除-lfl任何存在的参数。

于 2014-04-14T22:42:28.343 回答