gcc 与 lex 配合良好,但在硬盘上找不到 libl.so

gcc works well with lex, but cannot find a libl.so on hard disk

我可以像下面这样使用 lex:

lex my.l && gcc lex.yy.c -ll

没问题,它有效。从 gcc link 选项,我猜有一个名为 libl.so 的库表示 lex 运行时库。

cd /
find ./ -name "libl.so"

但是我没有找到任何结果。那么真的有一个叫做libl.so的库吗? gcc 使用 lex link 的真实库名称是什么?

谢谢!

这取决于您安装 (f)lex 的方式;该库可能是一个存档而不是共享对象(即 libl.a)。 Flex 通常还提供 libfl.alibfl.so

如果您有 debian 或 ubuntu 系统,(f)lex 库位于 libfl-dev 包中,其中(在 x86_64 平台上)包括以下库:

/usr/lib/x86_64-linux-gnu/libfl.a
/usr/lib/x86_64-linux-gnu/libfl_pic.a
/usr/lib/x86_64-linux-gnu/libfl.so
/usr/lib/x86_64-linux-gnu/libl.a

以及其他一些文件。

对于 RHEL 或 Centos,您需要安装 flex-devel 以获得 libfl.a 和 libl.a 以及安装 bison-devel 以获得 liby.a.