嗨,我正在学习Lex和yacc.我创建了以下lex程序.
%{
#include <stdio.h>
%}
%%
[0123456789]+ printf("NUMBER\n");
[a-zA-Z][a-zA-Z0-9]* printf("WORD\n");
%%
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用以下命令运行它:
还尝试了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
Run Code Online (Sandbox Code Playgroud)
我试过谷歌搜索这个错误但到目前为止没有运气.由于我是Lex编程的新手,我不知道如何解决这个问题.任何帮助将不胜感激.非常感谢提前.
如果你使用 lex + yacc 你可以删除 -lfl 如果你定义了 yywrap 函数,或者更好的是,如果你使用 noyywrap 选项:
%option noyywrap
%%
...
%%
Run Code Online (Sandbox Code Playgroud)
小智 5
我遇到同样的问题,所以我检查出来在互联网和发现workingcaptchabypass解决方案发布2011年6月3日下午6点44分在这里
他说:
您可以改为添加此函数并正常编译
yywrap()
{
}
Run Code Online (Sandbox Code Playgroud)
所以我在主函数之前提供了 .lex 文件中的代码。这样做之后,它找到了它应该的方式:)
小智 5
要编译lex代码,首先应该在机器中安装flex.如果是这样,会有一个文件libfl.a.在我的机器上,我在'C:\ GnuWin32\lib'中安装了flex
gcc lex.yy.c -L"C:\ GnuWin32\lib"-lfl
我在使用 MinGW 将 TXR 移植到 Windows 时遇到了这个问题。
MinGW 本身有一个 Flex 库,但不会将其导出到环境中。
请参阅此处: http: //lists.nongnu.org/archive/html/txr-users/2011-10/msg00001.html
解决方法是使用-L/usr/lib
before -lfl
. 但想一想:这是一个黑客行为。为什么?因为该路径/usr/lib/
属于MinGW,即编译环境的运行时。
/usr/lib
不是工具链应该为正在构建的 Windows 程序找到库的位置(它不在库搜索路径中!)
也就是说,我们在交叉编译作业中有效地窃取了构建机器的本机库。
这就像您在 Ubuntu 上交叉编译一个 Fedora 程序,并帮助自己使用 Ubuntu 的静态库,因为/usr/lib
Fedora 交叉工具链中恰好缺少该静态库(利用架构和目标文件格式发生的事实)是一样的)。
这绝对是MingW中Flex“打包”方式的一个bug。