我怎样才能消除“主要”?弯曲和弯曲的常规bison 这样我就可以将词法分析和解析过程放入库中?
我正在开发一个解析 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
我该如何解决这个问题..?谢谢。
I'm working on a parser that parses json string and I want to make it a library.
The problem is that when I use ld to link the library I wrote,
there's a error message:
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
how can I fix this..? thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用 gcc -o charcount charcount.o -lfl 代替 gcc -o charcount -lfl charcount.o 可能会有所帮助。
奇怪的是,目标文件和共享库的顺序在这里至关重要,但恢复确实有效。
using
gcc -o charcount charcount.o -lfl
instead ofgcc -o charcount -lfl charcount.o
may be help.It's strange that the order of object file and shared library make crucial sense here, but the reversion really works.
由于 flex 和 bison 都没有为您创建 main 函数,因此它一定是您自己的
main()
代码中妨碍库的代码。基本上,不要将main()
放入库中。然而,公平地说,Flex 库(
-lfl
、/usr/lib/libfl.*
)和 Yacc 库(-ly
、/usr/lib/liby.*
)实际上包含一个基本的main()
程序。如果您使用其中一个或两个库,则必须确保在扫描库之前链接您自己的带有main()
的目标文件。Since neither flex nor bison creates the main function for you, it must be your own
main()
in the code that is getting in the way of the library. Basically, do not putmain()
into a library.However, it is only fair to note that both the Flex library (
-lfl
,/usr/lib/libfl.*
) and the Yacc library (-ly
,/usr/lib/liby.*
) do in fact contain a rudimentarymain()
program. If you use either or both of those libraries, then, you must make sure your own object file withmain()
is linked before the libraries are scanned.