【问题标题】:FLEX Cannot build lex.yy.cFLEX 无法构建 lex.yy.c
【发布时间】:2014-01-19 23:06:24
【问题描述】:

  • 已下载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: 抛出 undefined symbols for architecture x86_64
    - gcc lex.yy.c -lfl: ld: 找不到 -lfl 的库
    - gcc lex.yy.c -ll:生成 a.out,但是当我对文件运行它时,它不起作用(打印“0 - 0”)。

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

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

  • 【问题讨论】:

    • 得到程序编译后你到底做了什么?它表现出什么行为,你试图做什么?我问是因为它应该等待来自标准输入的输入并读取直到 EOF。
    • 如果您在没有参数的情况下运行 ./configure,那么您的 make install 应该已将 libfl.a 和/或 libfl.so 安装到 /usr/local/lib 中。检查那里的那些文件。如果它们丢失,您需要找出原因。如果其中至少存在一个,请尝试在 -lfl 之前添加 -L/usr/local/lib
    • @ChronoKitsune 从lex.yy.c蓝图编译出来的可执行文件应该和一个随机文件一起运行,然后打印出那个文件的行数和字符数(当然随机文件是在我的情况下通常是一个文本文件)。 ./a.out < lex.yy.c 打印 "14 - 115" ==> 所以这些是文件 lex.yy.c 的统计信息,但它可以是任何文件。
    • @WumpusQ.Wumbley Aw man.. 我的 /usr/local/lib 只有一个文件夹(perl 分期付款 - 与我的需要无关)。知道了这一点,当我必须再次运行make install 时,如何删除当前安装? make distclean 会吗?
    • 实际上,现在我已经注意到 osx 标签,我不太确定 /usr/local/lib 是正确的位置。当您运行make install 时看到打印到终端的消息会很有趣(我知道它可能很多)。在另一个主题上,cleandistclean 仅适用于构建目录;大多数 GNU 软件包使用 make uninstall 作为 make install 的对立面

    标签: c++ c macos gcc flex-lexer


    【解决方案1】:

    好的。所以事实证明我错过了一个名为%option noyywrap的参数,它在这里:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      相关资源
      最近更新 更多