Flex和Yacc - 找不到 - lfl?

时间:2012-04-16 14:13:31

标签: yacc lex

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

%{
#include <stdio.h>
%}

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

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

  1. lex example1.l
  2. cc lex.yy.c -o example1 -ll
  3. 还尝试了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编程的新手,我不知道如何解决这个问题。任何帮助将不胜感激。非常感谢提前。

8 个答案:

答案 0 :(得分:5)

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

中安装了flex

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

答案 1 :(得分:4)

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

%option noyywrap
%%
 ...
%%

答案 2 :(得分:3)

我遇到了同样的问题,所以我在互联网上查了一下,并通过workcaptchabypass发现了一个解决方案2011年6月3日下午6:44 here

他说:

  

您可以添加此功能并正常编译

yywrap()
{
}

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

答案 3 :(得分:1)

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

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

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

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

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

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

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

错误: cannot find -lflx

在Makefile中更改: LEXLIB = -lflLEXLIB =

否则在任何地方删除-lfl参数。

答案 6 :(得分:0)

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

npm install

答案 7 :(得分:0)

尝试在gcc中使用 -ll 代替 -lfl