【问题标题】:OpenJDK 1.8.0_202 with CentOS 7: libpng12.so.0: cannot open shared object file:OpenJDK 1.8.0_202 与 CentOS 7:libpng12.so.0:无法打开共享对象文件:
【发布时间】:2019-08-07 02:22:01
【问题描述】:

我正在使用最新的 OpenJDK 版本:

$ ./jdk/jre/bin/java -version
openjdk version "1.8.0_202"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_202-b08)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.202-b08, mixed mode)

我收到以下链接错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/local/apps/jdk/jre/lib/amd64/libfontmanager.so: libpng12.so.0: cannot open shared object file: No such file or directory
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1845)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)
    at sun.font.FontManagerNativeLibrary$1.run(FontManagerNativeLibrary.java:61)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.font.FontManagerNativeLibrary.<clinit>(FontManagerNativeLibrary.java:32)
    at sun.java2d.xr.XRSurfaceData.initXRSurfaceData(XRSurfaceData.java:85)
    at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:137)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:74)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:103)
    at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82)
    at sun.awt.X11.XToolkit.<clinit>(XToolkit.java:132)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at java.awt.Toolkit$2.run(Toolkit.java:860)
    at java.awt.Toolkit$2.run(Toolkit.java:855)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:854)
    at sun.swing.SwingUtilities2.getSystemMnemonicKeyMask(SwingUtilities2.java:2020)
    at javax.swing.plaf.basic.BasicLookAndFeel.initComponentDefaults(BasicLookAndFeel.java:1158)
    at javax.swing.plaf.metal.MetalLookAndFeel.initComponentDefaults(MetalLookAndFeel.java:431)
    at javax.swing.plaf.basic.BasicLookAndFeel.getDefaults(BasicLookAndFeel.java:148)
    at javax.swing.plaf.metal.MetalLookAndFeel.getDefaults(MetalLookAndFeel.java:1577)
    at javax.swing.UIManager.setLookAndFeel(UIManager.java:539)
    at javax.swing.UIManager.setLookAndFeel(UIManager.java:579)
    at javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1349)
    at javax.swing.UIManager.initialize(UIManager.java:1459)
    at javax.swing.UIManager.maybeInitialize(UIManager.java:1426)
    at javax.swing.UIManager.getUI(UIManager.java:1006)
    at javax.swing.JPanel.updateUI(JPanel.java:126)
    at javax.swing.JPanel.<init>(JPanel.java:86)
    at javax.swing.JPanel.<init>(JPanel.java:109)
    at javax.swing.JPanel.<init>(JPanel.java:117)
    at javax.swing.JRootPane.createGlassPane(JRootPane.java:546)
    at javax.swing.JRootPane.<init>(JRootPane.java:366)
    at javax.swing.JApplet.createRootPane(JApplet.java:161)
    at javax.swing.JApplet.<init>(JApplet.java:149)

使用以下操作系统测试:

  • 红帽 7.4
  • CentoS 7.4
  • CentOS 7.0

我猜安装 libpng12.x86_64 会使其工作。但是这是正常的还是最新版本的 OpenJDK 有问题?

谢谢

【问题讨论】:

    标签: java centos redhat


    【解决方案1】:

    这实际上是在 GA 发布后报告和修复的问题。 AdoptOpenJDK 团队随后重新发布了 8u202-b08。

    https://github.com/AdoptOpenJDK/openjdk-build/issues/851

    所以有多个版本的 jdk8u202-b08。我下载了一个新版本,它运行良好,无需安装 libpng12。

    我被告知新版本将包含一个 AdoptOpenJDK 特定的内部版本号以便能够区分。

    【讨论】:

      【解决方案2】:

      libpng 1.2 的兼容性包作为libpng12 包的一部分提供。您可以使用以下命令以 root 身份安装它:

      yum install libpng12
      

      但是,AdoptOpenJDK 版本可能存在其他集成问题。如果可能,您应该使用作为 Red Hat Enterprise Linux 一部分的 OpenJDK 构建。此 OpenJDK 构建附带 RPM 依赖信息,并与当前系统 libpng 版本 (1.5.13) 相关联。

      您可以在 Red Hat Enterprise Linux 7.4 上安装当前 Red Hat Enterprise Linux 7 版本的 OpenJDK RPM(此时仅扩展更新支持涵盖)。 OpenJDK 本身不包含在EUS package set 中。

      【讨论】:

      • 为什么 Oracle JDK 从来没有发生过这种情况?
      • 大概是 Oracle 在发布之前在 Red Hat Enterprise Linux 上测试了他们的构建(或在 Oracle Linux 上)。他们还捆绑了很多第三方代码。
      猜你喜欢
      • 2019-04-23
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多