2011-01-13 9 views
6

私はjsonの文字列を解析するパーサーに取り組んでいます。私はそれをライブラリにしたいと思います。 問題は、私は私が書いたライブラリをリンクするために、LDを使用する場合、 エラーメッセージがあるということです。 どのように私はライブラリにlexingと解析プロセスを置くことができるようにフレックス&bisonの 'メイン'ルーチンを排除できますか?

main.o: In function `main': 
main.c:(.text+0x0): multiple definition of `main' 
json-parser.o:/build/buildd/flex-2.5.35/libmain.c:29: first defined here 

は、どのように私はこの問題を解決することができ

..?ありがとう。

+0

CPPFLAGS = -Dmain = foo –

答えて

5

フレックスもバイソンもメイン関数を作成していないので、ライブラリの途中でコード内に自分自身のmain()でなければなりません。基本的にはmain()をライブラリに入れないでください。

しかし、実際には初歩的なmain()プログラムが含まれていないことをFlexライブラリ(-lfl/usr/lib/libfl.*)とyaccライブラリ(-ly/usr/lib/liby.*)の両方に注意することが唯一のフェアです。これらのライブラリのいずれかまたは両方を使用する場合は、ライブラリがスキャンされる前に、自分のオブジェクトファイルがmain()にリンクされていることを確認する必要があります。

+0

はい、それは '-lfl'です。ありがとうございます~~~~ – mapcan

6

gcc -o charcount -lfl charcount.oの代わりにgcc -o charcount charcount.o -lflを使用すると助かります。

ここでは、オブジェクトファイルと共有ライブラリの順序が重要な意味を持ちますが、復帰が実際に機能するのは奇妙です。

+0

これは奇妙なことではありません、[この回答]で説明されています(https://stackoverflow.com/a/4682741/1983495)。 )。 –

関連する問題