我怎样才能消除“主要”?弯曲和弯曲的常规bison 这样我就可以将词法分析和解析过程放入库中?

发布于 2024-10-11 16:35:52 字数 270 浏览 6 评论 0原文

我正在开发一个解析 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

半衬遮猫 2024-10-18 16:35:52

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

奇怪的是,目标文件和共享库的顺序在这里至关重要,但恢复确实有效。

using gcc -o charcount charcount.o -lfl instead of gcc -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.

爱的十字路口 2024-10-18 16:35:52

由于 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 put main() 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 rudimentary main() program. If you use either or both of those libraries, then, you must make sure your own object file with main() is linked before the libraries are scanned.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文