AIX 7.1中OpenJDK 11无法加载libfontmanager.so模块求助
AIX 7.1 运行OpenJDK 11 Jar包时libfreetype依赖报错处理
问题背景
在AIX 7.1服务器上配置OpenJDK 11后,运行Jar包时程序终止,触发java.lang.UnsatisfiedLinkError。已确认/usr/jdk11/lib/libfontmanager.so存在,且JDK路径已加入LIBPATH、LD_LIBRARY_PATH和PATH环境变量,但报错提示无法加载依赖模块libfreetype.a(libfreetype.so.6)。
具体报错信息
Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/jdk11/lib/libfontmanager.so: /usr/jdk11/lib/libfontmanager.so,LIBPATH=/usr/jdk11/lib/server:/usr/jdk11/lib:/usr/jdk11/lib/jli:/usr/jdk11/../lib:.:/appli/automic/21/Utility/bin:/appli/automic/instantclient_12_1:/usr/lib:/lib:/usr/jdk11/lib,LD_LIBRARY_PATH=.:/appli/automic/21/Utility/bin:/appli/automic/instantclient_12_1:/usr/lib:/lib:/usr/jdk11/lib: 0509-022 Cannot load module /usr/jdk11/lib/libfontmanager.so. 0509-150 Dependent module libfreetype.a(libfreetype.so.6) could not be loaded. 0509-022 Cannot load module libfreetype.a(libfreetype.so.6). 0509-026 System error: A file or directory in the path name does not exist. 0509-022 Cannot load module /usr/jdk11/lib/libfontmanager.so. 0509-150 Dependent module /usr/jdk11/lib/libfontmanager.so could not be loaded. at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method) at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2445) at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2501) at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2700) at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2651) at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:830) at java.base/java.lang.System.loadLibrary(System.java:1873) at java.desktop/sun.font.FontManagerNativeLibrary$1.run(FontManagerNativeLibrary.java:57) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.desktop/sun.font.FontManagerNativeLibrary.<init>(FontManagerNativeLibrary.java:32) at java.desktop/sun.java2d.xr.XRSurfaceData.initXRSurfaceData(XRSurfaceData.java:104) at java.desktop/sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:124) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.desktop/sun.awt.X11GraphicsEnvironment.<init>(X11GraphicsEnvironment.java:61) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:315) at java.desktop/java.awt.GraphicsEnvironment$LocalGE.createGE(GraphicsEnvironment.java:101) at java.desktop/java.awt.GraphicsEnvironment$LocalGE.<init>(GraphicsEnvironment.java:83) at java.desktop/java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:129) at java.desktop/sun.awt.X11.XToolkit.<init>(XToolkit.java:232) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:315) at java.desktop/java.awt.Toolkit$2.run(Toolkit.java:588) at java.desktop/java.awt.Toolkit$2.run(Toolkit.java:583) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.desktop/java.awt.Toolkit.getDefaultToolkit(Toolkit.java:582) at java.desktop/sun.swing.SwingUtilities2.getSystemMnemonicKeyMask(SwingUtilities2.java:2212) at java.desktop/javax.swing.plaf.basic.BasicLookAndFeel.initComponentDefaults(BasicLookAndFeel.java:1096) at java.desktop/javax.swing.plaf.metal.MetalLookAndFeel.initComponentDefaults(MetalLookAndFeel.java:440) at java.desktop/javax.swing.plaf.basic.BasicLookAndFeel.getDefaults(BasicLookAndFeel.java:150) at java.desktop/javax.swing.plaf.metal.MetalLookAndFeel.getDefaults(MetalLookAndFeel.java:1560) at java.desktop/javax.swing.UIManager.setLookAndFeel(UIManager.java:587) at java.desktop/javax.swing.UIManager.setLookAndFeel(UIManager.java:629) at java.desktop/javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1404) at java.desktop/javax.swing.UIManager.initialize(UIManager.java:1517) at java.desktop/javax.swing.UIManager.maybeInitialize(UIManager.java:1483) at java.desktop/javax.swing.UIManager.getDefaults(UIManager.java:709) at java.desktop/javax.swing.UIManager.put(UIManager.java:1038) at com.ucutil.ucdbload.CUCYDBLoad.licence(CUCYDBLoad.java:231) at com.ucutil.ucdbload.CUCYDBLoad.<init>(CUCYDBLoad.java:118) at com.ucutil.ucdbload.CUCYDBLoad.main(CUCYDBLoad.java:958)
关键说明
libfreetype.a(libfreetype.so.6)是系统级独立依赖库,并非libfontmanager.so的内部模块,OpenJDK 11的字体管理模块需要依赖该库完成字体渲染相关操作。
解决步骤
1. 检查系统是否已安装freetype库
执行以下命令查看已安装的freetype包:
lslpp -l | grep freetype
若无输出,说明未安装该库。
2. 安装freetype库
- 通过AIX系统安装介质(如安装光盘、NIM服务器)安装,使用
smitty install图形化工具或installp命令,对应的包名通常为freetype.rte。 - 若无法通过系统介质安装,可从IBM官方提供的AIX工具包获取适配AIX 7.1的freetype安装包进行安装。
3. 验证安装与环境变量
安装完成后,执行以下命令确认安装成功:
lslpp -l freetype.rte
同时确保freetype库所在路径(通常为/usr/lib或/opt/freeware/lib)已加入LIBPATH环境变量(AIX系统优先识别LIBPATH,而非LD_LIBRARY_PATH)。
4. 临时应急方案(无需安装库)
若程序不需要图形界面或字体渲染功能,可通过添加JVM参数禁用AWT/Swing相关模块,避免加载依赖库:
java -Djava.awt.headless=true -Dsun.java2d.xrender=false -jar 你的应用包名.jar
内容的提问来源于stack exchange,提问作者Bharath Kumar Reddy
相关产品推荐
相关产品推荐

