Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/ram/openlogic-openjdk-17.0.14+7-linux-x64/lib/libfontmanager.so: libharfbuzz.so.0: cannot open shared object file: No such file or directory
at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:388)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:232)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:174)
at java.base/jdk.internal.loader.NativeLibraries.findFromPaths(NativeLibraries.java:315)
at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:285)
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2403)
at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:818)
at java.base/java.lang.System.loadLibrary(System.java:2006)
at java.desktop/sun.font.FontManagerNativeLibrary$1.run(FontManagerNativeLibrary.java:58)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at java.desktop/sun.font.FontManagerNativeLibrary.<clinit>(FontManagerNativeLibrary.java:33)
at java.desktop/sun.font.SunFontManager$1.run(SunFontManager.java:275)
at java.desktop/sun.font.SunFontManager$1.run(SunFontManager.java:273)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at java.desktop/sun.font.SunFontManager.initStatic(SunFontManager.java:273)
at java.desktop/sun.font.SunFontManager.<clinit>(SunFontManager.java:268)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at java.desktop/sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:75)
at java.desktop/java.awt.Font.getFont2D(Font.java:526)
at java.desktop/java.awt.Font.canDisplayUpTo(Font.java:2282)
at java.desktop/java.awt.font.TextLayout.singleFont(TextLayout.java:469)
at java.desktop/java.awt.font.TextLayout.<init>(TextLayout.java:530)
at org.apache.poi.ss.util.SheetUtil.getDefaultCharWidthAsFloat(SheetUtil.java:352)
at org.apache.poi.ss.util.SheetUtil.getColumnWidth(SheetUtil.java:310)
at org.apache.poi.ss.util.SheetUtil.getColumnWidth(SheetUtil.java:294)
at org.apache.poi.xssf.usermodel.XSSFSheet.autoSizeColumn(XSSFSheet.java:497)
at org.apache.poi.xssf.usermodel.XSSFSheet.autoSizeColumn(XSSFSheet.java:479)
at TestPOI.main(TestPOI.java:9)
问题的根本原因是 OpenLogic OpenJDK 17.0.14+7 在运行时依赖的 libharfbuzz.so.0 共享库文件缺失。libharfbuzz 是一个用于文本布局和字体形状的库,Java 的字体管理模块依赖于它
可以通过以下命令检查 libharfbuzz.so.0 是否可用:
ldconfig -p | grep libharfbuzz.so.0
如不存在,可通过命令安装
sudo yum install harfbuzz
(libharfbuzz 是一个用于文本布局和字体形状的库,Java 的字体管理模块依赖于它)
如果 libharfbuzz.so.0 已安装但 Java 无法找到它,可以通过设置 LD_LIBRARY_PATH 环境变量来解决:
export LD_LIBRARY_PATH=/path/to/libharfbuzz:$LD_LIBRARY_PATH
如果安装了后,也配置了环境变量,还不行。就有可能是open jdk库 不完整,可通过以下官网下载
openjdk 开源官网下载地址
https://www.openlogic.com/openjdk-downloads
https://builds.openlogic.com/downloadJDK/openlogic-openjdk/17.0.14+7/openlogic-openjdk-17.0.14+7-linux-x64.tar.gz