GNU flex 库 libfl 提供什么?

xji*_*xji 3 compiler-construction gnu compilation bison flex-lexer

我可以从 flex 和 bison 生成的文件编译一个程序

cc lex.yy.c program.tab.c -o output

并且还通过

cc lex.yy.c program.tab.c -lfl -o output

他们都运行顺利,没有任何问题。

那么libfl这里提供了什么?我试图搜索文档,但找不到详细的解释。

Nik*_*lai 8

$ nm /usr/lib/x86_64-linux-gnu/libfl.a
libmain.o:
0000000000000000 T main
                 U yylex
libyywrap.o:
0000000000000000 T yywrap
Run Code Online (Sandbox Code Playgroud)

如您所见,它提供了函数mainand yywrap,因此您无需定义它们。

  • 啊哈!如果我在它周围使用 `-Wl,--whole-archive -lfl -Wl,--no-whole-archive`,那么我会得到多个定义错误。这似乎是链接器如何处理与可执行文件相关的档案的行为。提供已经满足的符号(或仅提供不需要的符号)的对象被简单地丢弃。如果我们将存档分解为 `.o` 文件并在命令行中单独呈现它们(或多或少类似于 `--whole-archive` 行为),情况就不会如此。 (2认同)