# 旧版本linux(含centos) GLIBC/GLIBCXX 版本缺失问题解决指南

在 CentOS 7 或其他较旧版本的 Linux 系统中部署应用时,可能会遇到以下错误信息。这些错误本质上都源于 系统 GLIBC 版本过低:

Caused by: java.lang.UnsatisfiedLinkError: /root/smartjavaai_cache/pytorch/2.5.1-cpu-linux-x86_64/libc10.so: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /root/smartjavaai_cache/pytorch/2.5.1-cpu-linux-x86_64/libc10.so)

解决方法(仅适用于 CPU 环境):

1、使用 DJL 提供的 Precxx11 版本,替代默认的 PyTorch 本地依赖

DJL 提供了一个兼容 GLIBC 低版本的 libstdc++.so.6.24 版本,专门用于老系统。

第一步:移除默认 PyTorch 本地依赖(如果存在)

<dependency>
    <groupId>ai.djl.pytorch</groupId>
    <artifactId>pytorch-native-cpu</artifactId>
    <classifier>linux-x86_64</classifier>
    <scope>runtime</scope>
    <version>2.7.1</version>
</dependency>

第二步:添加 Precxx11 替代版本:

<dependency>
    <groupId>ai.djl.pytorch</groupId>
    <artifactId>pytorch-jni</artifactId>
    <version>2.5.1-0.34.0</version>
    <scope>runtime</scope>
</dependency>

x86_64 架构,替换如下jar

<dependency>
    <groupId>ai.djl.pytorch</groupId>
    <artifactId>pytorch-native-cpu-precxx11</artifactId>
    <classifier>linux-x86_64</classifier>
    <version>2.5.1</version>
    <scope>runtime</scope>
</dependency>

arm64 架构,替换如下jar

<dependency>
    <groupId>ai.djl.pytorch</groupId>
    <artifactId>pytorch-native-cpu-precxx11</artifactId>
    <classifier>linux-aarch64</classifier>
    <version>2.5.1</version>
    <scope>runtime</scope>
</dependency>

arm64 架构还需要下载 0.34.0-libdjl_torch.so 放入到 缓存路径 下的 /pytorch/2.5.1-20241113-cpu-precxx11-linux-aarch64 文件夹中

点击下载 (opens new window)

第三步:排除 xxx 中的部分依赖

<dependency>
    <groupId>cn.smartjavaai</groupId>
    <artifactId>face</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.microsoft.onnxruntime</groupId>
            <artifactId>onnxruntime</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
        </exclusion>
    </exclusions>
</dependency>

第四步:更换OnnxRuntime版本

引入低版本onnxruntime

<dependency>
    <groupId>com.microsoft.onnxruntime</groupId>
    <artifactId>onnxruntime</artifactId>
    <version>1.16.3</version>
    <scope>compile</scope>
</dependency>

到这里大部分情况都可以成功运行了

但如果出现如下错误,高版本的 OpenCV 依赖 GLIBC 2.27+,在 CentOS 7 上可能不兼容。你可以在项目中排除高版本,再引入兼容版本:

Caused by: java.lang.UnsatisfiedLinkError: /tmp/opencv_openpnp2647728894578271542/nu/pattern/opencv/linux/x86_64/libopencv_java481.so: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by /tmp/opencv_openpnp2647728894578271542/nu/pattern/opencv/linux/x86_64/libopencv_java481.so)

首先在排除中加入opencv

<dependency>
    <groupId>cn.smartjavaai</groupId>
    <artifactId>face</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.openpnp</groupId>
            <artifactId>opencv</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.microsoft.onnxruntime</groupId>
            <artifactId>onnxruntime</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
        </exclusion>
    </exclusions>
</dependency>

手动引入低版本 OpenCV

<dependency>
    <groupId>org.openpnp</groupId>
    <artifactId>opencv</artifactId>
    <version>3.4.2-2</version>
</dependency>

做完如上步骤,就可以解决类似问题,如果依然有问题可以联系作者解决