在 centos 9 上找不到 libl - /usr/bin/ld: 找不到 -ll

cant find libl on centos 9 - /usr/bin/ld: cannot find -ll

centos 9 的全新安装。(大部分是最小的)

我查了一下,我的机器上没有libl.so。

sudo yum 安装野牛 上次元数据过期检查:1:52:29 前,美国东部标准时间 2022 年 2 月 23 日星期三 01:25:31 下午。 软件包 bison-3.7.4-5.el9.x86_64 已经安装。

sudo yum install flex 上次元数据过期检查:1:52:25 前,美国东部时间 2022 年 2 月 23 日星期三 01:25:31 下午。 软件包 flex-2.6.4-9.el9.x86_64 已经安装。

sudo yum install flex-devel 上次元数据过期检查:1:52:35 前,美国东部标准时间 2022 年 2 月 23 日星期三 01:25:31 下午。 参数不匹配:flex-devel

我尝试安装 sudo yum groupinstall 'Development Tools'

没有任何效果,有什么想法吗?

正如您在问题中指出的那样 - flex-devel 未找到。

它在 PowerTools 存储库中。

启用repo的'official'方法是使用yum config-manager命令行:

yum config-manager --set-enabled powertools

这可能会导致缺少 config-manager 命令的错误:

No such command: config-manager

如果发生这种情况,那么您可以安装 dnf-plugins-core 软件包:

yum install -y dnf-plugins-core

然后启用powertools repo,然后你应该可以yum install flex-devel,它提供:

$ rpmquery --list flex-devel
/usr/lib64/libfl.a
/usr/lib64/libfl_pic.a
/usr/lib64/libl.a
/usr/share/doc/flex
/usr/share/licenses/flex-devel
/usr/share/licenses/flex-devel/COPYING

之前在包 flex-devel 中提供的静态库(libfl.alibl.a)已移至包 libfl-static。我不知道 RedHat 是否提供过共享对象; libfl-static ChangeLog 中有一条注释似乎在说有一个名为 libfl2 的新包,其中包含共享对象,但我没有在包 repo 中看到它。无论如何,静态库应该没问题。那里几乎什么都没有。

如果您使用 libl,这意味着:

  • 你没有使用 %option noyywrap,这将删除对 yywrap 的调用(如果你在 libl 中使用 yywrap 的版本,那么你不需要它来调用函数,因为那个版本无条件 returns 1), and/or
  • 您还没有提供自己的 main 函数。

我强烈建议在所有 flex 文件中包含以下选项,除非您明确需要被抑制的功能:

%option noinput nounput noyywrap nodefault

libl中的main函数也很简单。可以替换为:

int main(void) {
  while (yylex() != 0) { }
  return 0;
}