2011-06-22 44 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之間改變 相當++掃描儀積極。