yum install libnsl是唯一正解,因Oracle 19c硬依赖libnsl.so.1,而glibc≥2.28已将其剥离,Red Hat官方单独维护该包提供完整兼容ABI;compat-libnsl在CentOS 8+官方源中根本不存在。

直接装 yum install libnsl 就行,别找 compat-libnsl,它根本不存在。
为什么 libnsl 是唯一正解
Oracle 19c 的 runinstaller、内置 perl 和后续 sqlplus 都硬依赖 libnsl.so.1 这个 soname。CentOS 8+ 使用 glibc ≥2.28,该库已从 glibc 主体中剥离,但 Red Hat 官方仍单独维护 libnsl 包(如 libnsl-2.28-164.el8.x86_64),提供完整兼容 ABI。这不是“旧包”,而是专为向后兼容设计的官方分发版本。
- 搜
compat-libnsl或libnsl-compat属于 RHEL 7 命名惯性,CentOS 8 官方源里压根没这东西 - 用
dnf或yum都可以,优先试yum install libnsl - 安装后无需改
LD_LIBRARY_PATH,系统自动在/lib64/找到libnsl.so.1
装不上时常见卡点和应对
报 No package libnsl available:说明 yum 源没配全,检查 /etc/yum.repos.d/ 下 repo 文件里 enabled=1 是否对 BaseOS 和 AppStream 生效。
报冲突,比如提示 glibc-gconv-extra 版本不匹配:这是真实高频问题。典型错误是 libnsl-2.28-164.el8 要求 glibc=2.28-164,但系统已装 glibc-gconv-extra-2.28-209。此时得先卸载冲突包:
dnf -y remove glibc-gconv-extra-2.28-209.el8.x86_64- 再执行
yum install libnsl - 若离线环境,从同版本 ISO 镜像提取
libnsl-*.rpm,用rpm -ivh --nodeps应急安装
千万别手建软链接
看到 /lib64/libnsl.so.2.0.0 就去 ln -s libnsl.so.2.0.0 libnsl.so.1?这是最危险的操作。
-
libnsl.so.2.0.0是 glibc 2.28+ 重构后的 ABI,导出符号(如gethostbyname_r@GLIBC_2.2.5)与 Oracle 期望的libnsl.so.1不一致 - 安装可能“成功”,但后续
tnsping报TNS-12545、lsnrctl start段错误,排查成本极高 - 验证是否误建:
ls -l /lib64/libnsl.so*,若显示libnsl.so.1 -> libnsl.so.2.0.0,立刻rm /lib64/libnsl.so.1并重装libnsl
装完必须验证的两件事
只看 yum install 成功不够,得确认 Oracle 真用了这个库:
- 切到 oracle 用户,运行:
ldd $ORACLE_HOME/perl/bin/perl | grep libnsl,输出应含libnsl.so.1 => /lib64/libnsl.so.1 - 运行
$ORACLE_HOME/runInstaller -help,不再报libnsl.so.1: cannot open shared object file - 注意:预装包
oracle-database-preinstall-19c声明了libnsl依赖,但不会自动修复已卸载状态,必须显式安装
真正容易被忽略的是:即使 libnsl 装对了,RHEL/CentOS 8 上 Oracle 19c 还会卡在 compat-libstdc++ 检查、pdksh 缺失、/dev/shm 大小不足这些环节——libnsl 只是第一道门,不是最后一道。


















