Flex 和 bison 定义了自己的 'main' 函数
Flex and bison defining their own 'main' function
Flex 和 bison 定义了它们自己的 main
函数,因此当我使用库 libfl
和 liby
编译我的代码时,ld
不想 link 因为 main
被声明了多次。我该如何解决这个问题?
libfl
和 liby
都定义了一个 main
但是如果你使用不变的规则总是 把库放在最后 在 link 命令(或者编译命令,如果你在一个步骤中 linking 和编译)那么它们应该不会产生任何问题。 (换句话说,永远不要将 -lfl -ly
放在 您正在 link 的对象或源文件之前。)
请注意,如果您既不定义也不隐藏 yywrap
,则只需要 libfl
。如果您使用的是 flex 并且不需要 yywrap
功能,请将 %option noyywrap
添加到您的 flex 输入文件并忘记 libfl
.
此外,您根本不需要 liby
。除了main
,它还定义了yyerror
。但是,您应该始终自己定义 yyerror
,因此完全不需要库。
libfl
和 liby
是 "convenience" 库,可以帮助编写快速和肮脏的测试或 hack。生产代码不应该依赖它们。他们添加的功能包括不到十几行不是很有用的代码。
Flex 和 bison 定义了它们自己的 main
函数,因此当我使用库 libfl
和 liby
编译我的代码时,ld
不想 link 因为 main
被声明了多次。我该如何解决这个问题?
libfl
和 liby
都定义了一个 main
但是如果你使用不变的规则总是 把库放在最后 在 link 命令(或者编译命令,如果你在一个步骤中 linking 和编译)那么它们应该不会产生任何问题。 (换句话说,永远不要将 -lfl -ly
放在 您正在 link 的对象或源文件之前。)
请注意,如果您既不定义也不隐藏 yywrap
,则只需要 libfl
。如果您使用的是 flex 并且不需要 yywrap
功能,请将 %option noyywrap
添加到您的 flex 输入文件并忘记 libfl
.
此外,您根本不需要 liby
。除了main
,它还定义了yyerror
。但是,您应该始终自己定义 yyerror
,因此完全不需要库。
libfl
和 liby
是 "convenience" 库,可以帮助编写快速和肮脏的测试或 hack。生产代码不应该依赖它们。他们添加的功能包括不到十几行不是很有用的代码。