OpenJDK 1.8.0_202 с CentOS 7: libpng12.so.0: не удается открыть общий объектный файл:

#java #centos #redhat

#java #centos #redhat

Вопрос:

Я использую последнюю версию 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)
  

Протестировано со следующими операционными системами:

  • Red Hat 7.4
  • CentOS 7.4
  • CentOS 7.0

Я предполагаю, что установка libpng12.x86_64 заставит его работать. Но это нормально или есть проблема с последней версией OpenJDK?

Спасибо

Ответ №1:

Пакет совместимости для libpng 1.2 предоставляется как часть libpng12 пакета. Вы можете установить его от имени root с помощью:

 yum install libpng12
  

Однако могут возникнуть дополнительные проблемы с интеграцией со сборками AdoptOpenJDK. Если возможно, вам следует использовать сборку OpenJDK, которая является частью Red Hat Enterprise Linux. Эта сборка OpenJDK поставляется с информацией о зависимости от RPM и связана с текущей системной версией libpng (1.5.13).

Вероятно, вы можете установить OpenJDK RPM из текущей версии Red Hat Enterprise Linux 7 на Red Hat Enterprise Linux 7.4 (на который на данный момент распространяется только расширенная поддержка обновлений). Сам OpenJDK не входит в набор пакетов EUS.

Комментарии:

1. Почему этого никогда не происходило с Oracle JDKs?

2. Предположительно, Oracle тестировала свои сборки на Red Hat Enterprise Linux перед их выпуском (или на Oracle Linux). Они также включили в комплект много стороннего кода.

Ответ №2:

На самом деле это проблема, о которой сообщалось и которая была исправлена после выпуска GA. Затем команда AdoptOpenJDK повторно выпустила 8u202-b08.

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

Итак, существует несколько версий jdk8u202-b08. Я загрузил свежую версию, и она работает хорошо без необходимости устанавливать libpng12.

Мне сказали, что новые версии будут включать номер сборки, специфичный для AdoptOpenJDK, чтобы можно было различать.