FLEX 无法构建 lex.yy.c



  • 下载 flex-2.5.37.tar.gz
  • 解压缩并按照安装的说明进行操作:./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的未定义符号<</i>br/>- gcc lex.yy.c -lflLD:找不到 -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配置问题。

    感谢大家抽出宝贵时间阅读这个问题。希望这对其他人有所帮助。

    最新更新