Flex和Yacc - 找不到 - lfl?

问题描述 投票:8回答:6

嗨,我正在学习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

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

yacc lex
6个回答
5
投票

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

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


4
投票

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

%option noyywrap
%%
 ...
%%

3
投票

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

他说:

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

yywrap()
{
}

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


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中“打包”的方式中的一个错误。


0
投票

对于错误:cannot find -lflx

在Makefile中更改:LEXLIB = -lfl更改为LEXLIB =

否则,除非存在,否则删除-lfl参数。


0
投票

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

sudo apt install flex-old

© www.soinside.com 2019 - 2024. All rights reserved.