在 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.a
和 libl.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;
}
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.a
和 libl.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;
}