Я пытался изучить ANTLR и заставить его работать с выходным кодом C, используя этот учебник (также упоминаемый в этом вопросе). Я успешно получил ANTLR для генерации лексера и парсера в качестве источника C, но не могу заставить их скомпилировать с помощью gcc на Mac OS X Snow Leopard (i686-apple-darwin10-gcc-4.2.1). Ниже приведен результат, когда я пытаюсь скомпилировать «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 нигде не ссылается на «основной» (и при этом он не определен), но синтаксический анализатор определяет , поэтому я попытался скомпилировать это:
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
).