Как я могу исключить «основную» процедуру flex & bison, чтобы я мог поместить процесс лексирования и анализа в библиотеку? - PullRequest
8 голосов
/ 13 января 2011

Я работаю над анализатором, который анализирует строку json, и я хочу сделать его библиотекой.Проблема в том, что когда я использую ld для связи с библиотекой, которую я написал, появляется сообщение об ошибке:

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

как я могу это исправить?спасибо.

Ответы [ 2 ]

7 голосов
/ 19 мая 2012

с использованием gcc -o charcount charcount.o -lfl вместо gcc -o charcount -lfl charcount.o может помочь.

Странно, что порядок объектного файла и разделяемой библиотеки имеет здесь решающее значение, но реверсия действительно работает.

6 голосов
/ 13 января 2011

Поскольку ни flex, ни bison не создают для вас основную функцию, она должна быть вашей main() в коде, который мешает библиотеке.По сути, не помещайте main() в библиотеку.

Однако справедливо отметить, что и библиотека Flex (-lfl, /usr/lib/libfl.*), и библиотека Yacc (-ly, /usr/lib/liby.*) на самом деле содержит элементарную main() программу.Если вы используете одну или обе из этих библиотек, то перед сканированием библиотек вы должны убедиться, что ваш собственный объектный файл с main() связан.

...