我有一个文件test.lex,我将其作为
运行$ flex test.lex
这给了我lex.yy.c,我尝试编译:
$ gcc lex.yy.c -lfl
这给了我错误ld:找不到-lfl的库。我知道Flex规范是正确的,lex.yy.c在Linux机器上编译得很好。有什么建议吗?
编辑:我正在使用Apple提供的flex。
答案 0 :(得分:5)
有些系统使libfl成为独立的flex包,因为它很少需要。 libfl库只包含两个函数:
int main() {
while (yylex());
return 0;
}
int yywrap() {
return 1;
}
通常,您需要自己的main
功能,而不是libfl
中的功能,而定义yywrap
本身就是微不足道的。或者,您可以使用%option noyywrap
而根本不需要它。
在您的情况下,请尝试删除-lfl
选项。如果您收到关于yywrap
的错误,请将%option noyywrap
添加到test.lex
文件的第一部分。
答案 1 :(得分:0)
旧话题但被接受的答案对我没有帮助。
所以我要添加这个答案。
在macOS上,请使用-ll(如“库lex”中所述)。
适用于macOS 10.14莫哈韦沙漠。
也正如@Chris Dodd所说的那样,您可以通过在%option noyywrap
文件中指定.l
并提供自己的main
例程.y
文件来摆脱这种依赖性。