2017-11-21 19 views
1

次のコードをflexで作成し、cファイルが生成されましたが、コンパイラは "yywrap 'への未定義のエラーを表示します。このような未定義参照先yywrap()

%{ 
int nchar; 
int nline; 
%} 
%% 
[\n] {nline++;} 
. {nchar++;} 
%% 
void main(void){ 
yylex(); 
printf("%d%d,nchar,nline"); 
} 

質問が求められていると、すべての答えは の#define yywrap()1 が、この場合、プログラムの実行が、は動作しませんが、私はそれをしたいの追加など無視してyywrap機能に基づいていました作業。

+1

あなたのコードにはリンクされない 'yywrap'への参照があります。あなたはそれを定義しましたか?スタブ定義を自動的に定義しないバージョンを使用していますか? 'yywrap'を抑制したくない場合は、それを定義するかFlexを更新する必要があります。 – jdv

+0

私はflex-2.5.4a-1-binバージョンを使用します。どのように私はそれを更新すべきですか?私も他のバージョンを試しましたが、エラーは修正されていませんでした.iはyywrapを定義しませんでした! – Nazanin

+0

最も簡単なことは、スタブ定義を定義することです。つまり、実際に 'yywrap()'が必要ない場合は、何もしないでください。あなたはいくつかの調査をしたと言いましたが、https://stackoverflow.com/questions/1811125/undefined-reference-to-yywrapの答えの多くがここに当てはまりました。たとえば、 '-lfl'リンカオプションを使用していますか? – jdv

答えて

1

あなたはこのようにそれを自分で定義することができます。

int yywrap() { 
// open next reference or source file and start scanning 
if((yyin = compiler->getNextFile()) != NULL) { 
    line = 0; // reset line counter for next source file 
    return 0; 
    } 
return 1; 
} 

たり、それを使用しないことを決定:

%option noyywrap 

か、それをインストールします。これはRedhatベースのOSの場合のようです:

yum -y install flex-devel 
    ./configure && make