首页 文章

Flex和Yacc - 找不到 - lfl?

提问于
浏览
7

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

%{
#include <stdio.h>
%}

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

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

  • lex example1.l

  • 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编程的新手,我不知道如何解决这个问题 . 任何帮助将不胜感激 . 非常感谢提前 .

6 回答

  • 1

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

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

  • 5

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

    %option noyywrap
    %%
     ...
    %%
    
  • 0

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

    他说:

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

    yywrap()
    {
    }
    

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

  • 4

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

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

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

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

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

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

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

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

  • 3

    如有错误: cannot find -lflx

    在Makefile中更改: LEXLIB = -lflLEXLIB = .

    否则,删除 -lfl 参数 .

  • 0

    在努力解决与你相同的问题之后,我安装了flex-old:

    sudo apt install flex-old

相关问题