나는 ANTLR을 배우고 this 튜토리얼 (this 질문에서도 사용됨)을 사용하여 C 출력 코드로 작업하려고 노력했습니다. 성공적으로 C 소스로 lexer와 parser를 생성하는 ANTLR을 얻었지만 Mac OS X Snow Leopard (i686-apple-darwin10-gcc-4.2.1)에서 gcc를 사용하여 컴파일 할 수 없습니다. 아래는 "SimpleCalcLexer.c"를 컴파일하려고했을 때의 결과입니다.C에서 ANTLR 3 문법 컴파일
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 파일을 참조하지 않습니다는 "주"어디 (도 아니다 정의), 그러나 파서 는 그것을 정의 않기 때문에 나는 컴파일하려고 :
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
).
고마워요! "-lantlr3c"플래그는 내가 누락 된 플래그입니다. 라이브러리가 32 비트 전용이기 때문에 "-arch i386"이 필요하다는 것을 알았고 Snow Leopard gcc는 내 컴퓨터에서 64 비트를 컴파일하려고합니다. – CajunLuke