8

Flex (字句解析器) の使い方を学んでいて、次のコマンドでコンパイルしています。

gcc -lfl -o test lex.yy.c

そしてすべてが順調です。ただし、他のファイルとリンクしたいので、別途コンパイルしてリンクする

gcc -c lex.yy.c

に続く

gcc -lfl -o test lex.yy.o

しかし、gcc は への未定義の参照があることを教えてくれますyywrap()。それで、ここで何が起こっているのですか?

Flex 2.5.35、gcc 4.7.2、および ld 2.22 を使用しています

4

5 に答える 5

22

-lfl最初ではなく最後に追加します。

于 2012-12-28T12:47:13.837 に答える
4

を使用しgcc lex.yy.c -llます。そうしないと、 への未定義の参照が生成されyywrapます。

于 2014-11-04T11:51:51.233 に答える
2

または、ライブラリを使用したくない場合は#define yywrap()、.l ファイルに 1 を指定するか、yywrap()1 を返すメソッドを提供します。

それは文書化されています。

于 2013-01-12T02:17:30.047 に答える
1

ファイルaddon.cを作成しました

int yywrap (void )
{
    return 1;
}

そしてそれをターゲットに追加しました。

于 2016-10-24T22:04:07.167 に答える
1

私の解決策は次のとおりです。

sudo apt-get install flex

于 2013-05-23T13:02:18.217 に答える