如何消除flex&bison的"主要"例程,以便将lexing和解析过程放入库中?

map*_*can 8 parsing yacc lex bison flex-lexer

我正在研究一个解析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
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题..?谢谢.

zhe*_*chl 7

使用gcc -o charcount charcount.o -lfl而不是 gcc -o charcount -lfl charcount.o可能是帮助.

奇怪的是,目标文件和共享库的顺序在这里具有重要意义,但是回归确实有效.


Jon*_*ler 6

由于flex和bison都没有为您创建主要功能,因此它必须是您自己main()的代码中阻碍库的方式.基本上,不要放入main()图书馆.

但是,值得注意的是,Flex库(-lfl,/usr/lib/libfl.*)和Yacc库(-ly,/usr/lib/liby.*)实际上都包含一个基本main()程序.如果您使用其中一个或两个库,则必须确保main()在扫描库之前链接自己的目标文件.