Flex和bison定义了他们自己的main
函数,因此当我使用库libfl
和liby
编译我的代码时,ld
不想链接它,因为多次声明main
。我该如何解决这个问题?
答案 0 :(得分:3)
libfl
和liby
都定义了main
但是如果你使用始终将库放在中的不变规则在链接命令中(或编译命令,如果你在一步中链接和编译)然后他们不应该创建任何问题。 (换句话说,永远不要在您要链接的对象或源文件之前放置-lfl -ly
。)
请注意,如果您没有定义或取消libfl
,则只需yywrap
。如果您使用的是flex并且不需要yywrap
功能,请将%option noyywrap
添加到您的Flex输入文件中,忘记libfl
。
此外,您根本不需要liby
。除了main
之外,它还定义了yyerror
。但是,您应该始终自己定义yyerror
,因此库完全没必要。
libfl
和liby
是"方便"库可以帮助编写快速和脏的测试或黑客。生产代码不应该依赖它们。他们添加的功能包含不到十几行不太有用的代码。