我正在研究解析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
我该如何解决这个问题?感谢。
答案 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()
目标文件。