• 下载了flex-2.5.37.tar.gz
  • 打开包装并按照INSTALL的说明进行操作:./configure + make + make install
  • 在一个新文件夹中,我编写了一个example.l文件,其中包含:
    %{
    int a = 0, b = 0;
    %}
    
    %%
    \n   ++a; ++b;
    .    ++b;
    
    %%
    int main()
    {
         yylex();
         printf("%d - %d", a, b);
    }
    

    这是他们网站上的一个基本示例。计算文件中的行和字符。

  • 在终端中,我运行了flex example.l。它生成了lex.yy.c
  • 之后:
    -gcc lex.yy.c -o lexyy:抛出体系结构x86_64的 undefined symbol
    -gcc lex.yy.c -lfl:ld:-lfl找不到库
    -gcc lex.yy.c -ll:生成a.out,但是当我对文件运行它时,它不起作用(打印“0-0”)。

    看来我无法编译该死的文件。它如何知道在哪里可以找到必要的库?链接不应该从这里(当前文件夹)开始吗?

    我无法获得最简单的示例,这有点令人沮丧。
  • 最佳答案

    好的。因此,事实证明我缺少一个名为%option noyywrap的参数,该参数位于此处:

    %{
    int a = 0, b = 0;
    %}
    
    %option noyywrap
    
    %%
    \n   ++a; ++b;
    .    ++b;
    ...
    

    显然,这告诉FLEX只有一个源文件。因此,这不是gcc问题,而是FLEX配置问题。

    谢谢大家花时间阅读问题。希望这对其他人有帮助。

    关于c++ - FLEX无法生成lex.yy.c,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21223862/

    10-12 20:48