代码之家  ›  专栏  ›  技术社区  ›  dstnbrkr

无法编译lex的输出

  •  5
  • dstnbrkr  · 技术社区  · 15 年前

    当我试图编译这个普通lex程序的输出时:

    # lex.l
    integer   printf("found keyword INT");
    

    使用:

    $ gcc lex.yy.c
    

    我得到:

    Undefined symbols:
      "_yywrap", referenced from:
          _yylex in ccMsRtp7.o
          _input in ccMsRtp7.o
      "_main", referenced from:
          start in crt1.10.6.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status
    

    lex--version告诉我我实际上使用的是'flex 2.5.35',尽管ls-fla'which lex'不是符号链接。你知道为什么输出不会编译吗?

    2 回复  |  直到 7 年前
        1
  •  20
  •   rici    7 年前

    the Flex manual :

    我得到一个关于未定义yywrap()的错误。

    您必须提供自己的yywrap()函数,或者链接到libfl.a(它提供了一个函数),或者使用

    %option noyywrap
    

    在源代码中表示不需要yywrap()函数。

    Also:

    当扫描仪接收到 文件结束指示来自 然后检查yywrap()函数。如果 yywrap()返回false(零),则假定 函数已执行并设置yyin以指向 另一个输入文件,然后继续扫描。如果它回来了 为真(非零),则扫描仪终止,返回0 致来电者。注意,无论哪种情况,启动条件- 操作保持不变;它不会还原为初始值。

        2
  •  0
  •   Brooks Moses    15 年前

    正如eli的回答所暗示的,这不是一个简单的lex程序。这是一个微不足道的莱克斯 文件 ,因此是程序的一部分,但它(与任何lex文件一样)需要与一些c代码结合才能构成完整的程序。尤其是,你仍然需要 main 函数(用C或C++或其他东西写在一个单独的文件中),并且还需要写一个 yywrap 提供lex代码和其他c代码之间接口的函数。