私はANTLRを学び、このチュートリアルを使用してC出力コードで動作させようとしています(この質問でも参照されています)。ANTLR でレクサーとパーサーを C ソースとして生成することに成功しましたが、Mac OS X Snow Leopard (i686-apple-darwin10-gcc-4.2.1) で gcc を使用してコンパイルすることはできません。以下は、「SimpleCalcLexer.c」をコンパイルしようとしたときの結果です。
dyn-72-33-132-199:Desktop bf$ gcc -o lexer SimpleCalcLexer.c
Undefined symbols:
"_main", referenced from:
start in crt1.10.6.o
"_antlr3LexerNewStream", referenced from:
_SimpleCalcLexerNewSSD in ccjXa6NU.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
SimpleCalcLexer.c ファイルはどこにも "main" を参照していません (定義もされていません) が、パーサーはそれを定義しているので、それをコンパイルしようとしました:
dyn-72-33-132-199:Desktop bf$ gcc -o parser SimpleCalcParser.c
Undefined symbols:
"_antlr3CommonTokenStreamSourceNew", referenced from:
_main in ccn8ZVhk.o
"_antlr3ParserNewStream", referenced from:
_SimpleCalcParserNewSSD in ccn8ZVhk.o
"_SimpleCalcLexerNew", referenced from:
_main in ccn8ZVhk.o
"_antlr3AsciiFileStreamNew", referenced from:
_main in ccn8ZVhk.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
いくつかの質問があります:
1) 私は何を間違っていますか? コードには他のantlr関数と定義が見つかっているため、ライブラリが見つかっていると確信しています。gcc を間違って呼び出していますか? (コマンドラインでこれほど複雑なものをコンパイルしたことはありません。)
2) とはccn8ZVhk.o
? これがオブジェクト コード ファイルであることはわかりますが、私のシステムでは見つかりません (locate
との両方mdfind
)。