当我尝试编译这个简单的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 statuslex --版本告诉我实际上使用的是'flex 2.5.35‘,尽管ls -fla which lex不是符号链接。你知道为什么输出不能编译吗?
发布于 2010-04-10 14:11:46
我得到了一个关于未定义的yywrap()的错误。
您必须提供自己的yywrap()函数,或者链接到libfl.a (它提供了一个),或者使用
%option noyywrap
在源代码中声明您不需要yywrap()函数。
当扫描程序收到来自YY_INPUT的文件结束指示时,它会检查
()函数。如果yywrap()返回false (零),则假定函数已经前进,并将yyin设置为指向另一个输入文件,然后继续扫描。如果返回true (非零),则扫描器终止,向调用者返回0。请注意,在这两种情况下,启动条件都保持不变;它不会恢复为初始状态。
发布于 2010-04-10 14:05:22
正如Eli的回答所暗示的,这不是一个微不足道的lex程序。它是一个微不足道的lex文件,因此是程序的一部分,但它(像任何lex文件一样)需要与一些C代码组合才能构成一个完整的程序。特别是,您仍然需要一个main函数(用C或C++或其他语言编写,放在一个单独的文件中),并且还需要编写一个yywrap函数来提供lex代码和C代码的其余部分之间的接口。
https://stackoverflow.com/questions/2612394
复制相似问题