我有一个文件test.lex,需要运行它
$ flex test.lex
那给了我lex.yy.c文件,我尝试编译它:
$ gcc lex.yy.c -lfl
这让我产生了错误信息:ld: 找不到库-lfl。我知道Flex规范是正确的,lex.yy.c在Linux机器上也可以编译通过。有任何建议吗?
编辑:我正在使用由Apple提供的Flex。
我有一个文件test.lex,需要运行它
$ flex test.lex
$ gcc lex.yy.c -lfl
有些系统把libfl从flex中分离出来,因为它很少被使用。libfl库只包含两个函数:
int main() {
while (yylex());
return 0;
}
int yywrap() {
return 1;
}
通常情况下,你会想要自己的main
函数而不是来自libfl
的那个,并且自己定义yywrap
也很简单。或者,您可以使用%option noyywrap
并完全不需要它。
在您的情况下,尝试只是摆脱-lfl
选项。如果您收到有关yywrap
的错误,请在test.lex
文件的第一部分添加%option noyywrap
。
虽然这是一个老话题,但接受的答案并没有帮助到我。
因此,我要添加这个答案。
在macOS上使用-ll(如“library lex”)。
适用于macOS 10.14 Mojave。
同样像@Chris Dodd所说的那样,您可以通过在.l文件中指定%option noyywrap
并在.y文件中提供自己的main
例程来摆脱这种依赖性。
最初的回答:
对于MacOS用户,可以使用-ll选项,也就是“library lex”。适用于MacOS 10.14 Mojave。同时,您还可以通过在.l文件中指定%option noyywrap并在.y文件中提供自己的main例程来避免这种依赖。