如何消除flex& amp;的'主'程序?野牛,所以我可以将lexing和解析过程放入库中?

时间:2011-01-13 13:09:02

标签: parsing bison yacc lex 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

我该如何解决这个问题?感谢。

2 个答案:

答案 0 :(得分:7)

使用gcc -o charcount charcount.o -lfl代替gcc -o charcount -lfl charcount.o可能会有所帮助。

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

答案 1 :(得分:6)

由于flex和bison都没有为您创建主要功能,因此它必须是代码中您自己的main(),这会阻碍库的运行。基本上,不要将main()放入库中。

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