java.NativeLibLoader调用系统libgomp.so

问题

# java程序调用系统底层so库
You may need to install 'libgomp.so' (or glibc) via your package manager.

ERROR | | ml.dmlc.xgboost4j.java.NativeLibLoader | Failed to load xgboost4j due to missing native dependencies for platform linux/x86_64, this is likely due to a missing OpenMP dependency online_mode |
ERROR | | ml.dmlc.xgboost4j.java.NativeLibLoader | You may need to install 'libgomp.so' (or glibc) via your package manager

当前系统环境信息

正确命令:microdnf 或 yum

bash-4.4# cat /etc/os-release 
NAME="Oracle Linux Server"
VERSION="8.8"
ID="ol"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="8.8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Oracle Linux Server 8.8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:8:8:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://github.com/oracle/oracle-linux"

ORACLE_BUGZILLA_PRODUCT="Oracle Linux 8"
ORACLE_BUGZILLA_PRODUCT_VERSION=8.8
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=8.8
bash-4.4# cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.8 (Ootpa)

解决

安装提示缺少的依赖so库libgomp,运行环境是基于容器化的

1.dnf安装提示command not found

在 Oracle Linux 8.8 里出现:

1
sh: dnf: command not found

你当前运行的不是完整的 Oracle Linux,而是“精简 / 容器基础镜像”

常见来源包括:

  • oraclelinux:8-slim
  • oraclelinux:8-micro
  • 基于 OL8 的二次裁剪镜像
  • distroless / runtime-only 镜像

这些镜像刻意移除了 dnf/yum,只保留运行时所需的最小集合。


2. 快速判断你现在是哪一类系统

/etc/os-release

1
cat /etc/os-release

如果你看到类似:

1
2
NAME="Oracle Linux Server"
VERSION="8.8"

没有 dnf,那几乎可以确定是:

Oracle Linux 8 的 minimal / slim / micro 容器


3. 解决路径

情况一:镜像里有 microdnf(最常见)

Oracle 官方为精简镜像准备了 microdnf

1
microdnf --help

如果存在,直接安装:

1
microdnf install -y libgomp libstdc++

验证:

1
ls /usr/lib64/libgomp.so*

这是容器场景下的首选方案


情况二:只有 yum

极少数裁剪镜像保留了 yum

1
yum install -y libgomp libstdc++

ML / JNI 调用链

xgboost4j 这种链路:

flowchart LR
    A[Java进程] --> B[JNI]
    B --> C[libxgboost.so]
    C --> D[libgomp.so]

只要少一个 so,服务就直接启动失败这类问题必须在镜像阶段解决。