You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX 23.0.1在Linux aarch64下因GLIBC_2.34缺失无法运行的问题求助

JavaFX 23.0.1 在Linux aarch64下依赖GLIBC_2.34的问题解决

问题背景

将JavaFX版本升级至23.0.1后,程序在Linux x64架构下可正常运行,但在Linux aarch64架构下无法启动,提示缺失GLIBC_2.34版本,错误日志如下:

Loading library prism_es2 from resource failed: java.lang.UnsatisfiedLinkError:/home/nusp/.openjfx/cache/23.0.1+4/aarch64/libprism_es2.so: /usr/lib64/libc.so.6:version 'GLIBC_2.34'not found(required by /home/nusp/.openjfx/cache/23.0.1+4/aarch64/libprism_es2.so)
java.lang.UnsatisfiedLinkError: /home/nusp/.openjfx/cache/23.0.1+4/aarch64/libprism_es2.so: /usr/lib64/libc.so.6: version GLIBC_2.34 not found (required by /home/nusp/.openjfx/cache/23.0.1+4/aarch64/libprism_es2.so)
    at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
    at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:331)
    at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:197)
    at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:139)
    at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2418)
    at java.base/java.lang.Runtime.load(Runtime.java:852)
    at java.base/java.lang.System.load(System.java:2025)

通过nm命令分析两个架构下的libprism_es2.so依赖:
Linux x64下执行nm -u libprism_es2.so结果:

w __cxa_finalize
U dlsym
U fprintf_chk
U free
U fwrite

Linux aarch64下执行nm -u libprism_es2.so结果:

w __cxa_finalize@GLIBC_2.17
U dlsym@GLIBC_2.34
U fprintf_chk@GLIBC_2.17
U free@GLIBC_2.17
U fwrite@GLIBC_2.17

已定位问题根源:Maven仓库中aarch64架构的JavaFX动态库基于GLIBC_2.34编译,使用Liberica JDK可正常运行。


问题解决方法

以下是几种可行的解决方案:

  • 使用Liberica JDK:该JDK自带适配低GLIBC版本的JavaFX库,直接替换现有JDK即可解决启动问题,这是最简便的方案。
  • 升级系统GLIBC至2.34及以上:如果系统允许,可升级到自带高版本GLIBC的Linux发行版(如Ubuntu 22.04+、CentOS Stream 9等);若无法升级发行版,也可手动编译安装GLIBC 2.34,但手动编译存在风险,可能影响系统其他依赖低版本GLIBC的程序。
  • 降级JavaFX版本:选择aarch64版本依赖更低GLIBC的JavaFX版本(如22.x或更早版本),需提前测试确认该版本的GLIBC依赖情况。
  • 自行编译JavaFX aarch64库:从OpenJFX源码编译,指定低版本GLIBC的编译环境(比如用较老的Linux发行版、Docker容器模拟低GLIBC环境),生成适配低版本GLIBC的动态库后,替换Maven仓库中的对应文件。

关于aarch64架构是否必须依赖GLIBC_2.34

不是必须的。aarch64架构本身并不要求GLIBC 2.34,Maven中央仓库的aarch64版JavaFX库依赖高版本GLIBC,只是因为其编译环境使用了高版本GLIBC,导致生成的动态库绑定了该版本的符号。像Liberica提供的JavaFX包就能兼容更低版本的GLIBC,证明架构本身不存在强制依赖。

内容的提问来源于stack exchange,提问作者KaLa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 07:47:24