Flex 和 bison 定义了自己的 'main' 函数

Flex and bison defining their own 'main' function

Flex 和 bison 定义了它们自己的 main 函数,因此当我使用库 libflliby 编译我的代码时,ld 不想 link 因为 main 被声明了多次。我该如何解决这个问题?

libflliby 都定义了一个 main 但是如果你使用不变的规则总是 把库放在最后 在 link 命令(或者编译命令,如果你在一个步骤中 linking 和编译)那么它们应该不会产生任何问题。 (换句话说,永远不要将 -lfl -ly 放在 您正在 link 的对象或源文件之前。)

请注意,如果您既不定义也不隐藏 yywrap,则只需要 libfl。如果您使用的是 flex 并且不需要 yywrap 功能,请将 %option noyywrap 添加到您的 flex 输入文件并忘记 libfl.

此外,您根本不需要 liby。除了main,它还定义了yyerror。但是,您应该始终自己定义 yyerror,因此完全不需要库。

libflliby 是 "convenience" 库,可以帮助编写快速和肮脏的测试或 hack。生产代码不应该依赖它们。他们添加的功能包括不到十几行不是很有用的代码。