2011-06-22 40 views
3

我试着用g++编译生成的扫描器时遇到了一些链接器错误,其中包括flex。如果我给flex以下(很简单)脚本:Flex和g ++的链接器错误?

%% 
. ECHO; 

然后运行flex作为

flex++ scanner.l 

然后尝试编译生成的代码

我收到以下错误:

/tmp/ccD5WdY3.o:(.rodata._ZTV11yyFlexLexer[vtable for yyFlexLexer]+0x28): undefined reference to `yyFlexLexer::yywrap()' 
/usr/lib/libl.a(libmain.o): In function `main': 
/build/buildd/flex-2.5.35/libmain.c:30: undefined reference to `yylex' 
collect2: ld returned 1 exit status 

我不确定这是为什么。我是否在错误的库中链接了-ll?如果是这样,我该怎么做才能解决这个问题?

+0

我对这个话题不太熟悉,但是你不需要解析器,它提供'yylex'函数吗?使用野牛++? –

+0

您是否想要标记这个w/Adob​​e Flex? – JeffryHouser

+0

啊,我的错!固定。 – templatetypedef

回答

4

正如你所说,我认为-ll是不必要的。
大概libl包含类似下面的代码:

int main() { return yylex(); } 

然而,flex++生成的扫描代码不包含独立的 功能yylex。 因此,如果扫描仪与以上main链接,它不能找到yylex
当通过flex++产生的扫描仪,该扫描仪需要一个专用main ,而不是与-ll链接和最简单的main将是这样的:

int main() { 
    for (yyFlexLexer l; l.yylex();) {} 
} 

至于C的用法++扫描器, this part flex文档的 将有所帮助。

这就是说,作为文档说:

扫描类 的本形式是实验,并且可以主要版本

我不能推荐用C之间改变 相当++扫描仪积极。