我收到以下错误
main.c: undefined reference to yyin
main.c: undefined reference to yyparse
这就是我正在做的我有一个lex文件a.lyacc文件b.y
main.c is:
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
extern int yyparse();
extern FILE *yyin;
FILE *outFile_p;
main(int argc,char *argv[])
{
if(argc<3)
{
printf("Please specify the input file & output filen");
exit(0);
}
FILE *fp=fopen(argv[1],"r");
if(!fp)
{
printf("couldn't open file for readingn");
exit(0);
}
outFile_p=fopen(argv[2],"w");
if(!outFile_p)
{
printf("couldn't open temp for writtingn");
exit(0);
}
yyin=fp;
yyparse();
fclose(fp);
fclose(outFile_p);
}
在此之前,我必须链接:
x.h和x.c .
在终端上写如下命令:
lex a.l
yacc -v -d b.y
gcc -o x.o -c x.c
gcc -o main.o -c main.c
gcc -o myexecutable main.o x.o
就是我得到这个错误的时候。我哪里做错了?
您似乎忽略了lex和yacc生成的.c
文件。它们通常被称为y.tab.c
和lex.yy.c
,但你最好自己检查一下。调用的顺序应该类似于以下内容:
lex a.l
yacc -v -d b.y
gcc -c y.tab.c
gcc -c lex.yy.c
gcc -c x.c
gcc -c main.c
gcc -o myexecutable *.o
我刚刚明白了。在main.c文件中添加以下内容:
extern FILE *yyin;
extern FILE *yyout;
extern int yyparse(void);