Ubuntu系统中如何解决‘UnsatisfiedLinkError: Can't load library’错误?
解决java.lang.UnsatisfiedLinkError: Can't load library: /usr/lib/jvm/java-17-openjdk-amd64/lib/libawt_xawt.so问题
兄弟你这明显是JDK版本不匹配的坑——你明明装了OpenJDK 11,但系统或程序还在盯着Java 17的AWT库找!别慌,咱们一步步把问题搞定:
第一步:确认系统已安装的JDK版本
先跑个命令看看系统里到底有哪些Java版本:
update-alternatives --list java
你应该能看到/usr/lib/jvm/java-11-openjdk-amd64/bin/java这个路径,要是没有的话,可能之前的OpenJDK 11安装没成功,得重新执行一次sudo apt install openjdk-11-jdk。
第二步:切换默认JDK到11
系统默认可能还在使用Java 17,咱们手动切换过去:
sudo update-alternatives --config java
这时候会弹出一个选项列表,你选对应OpenJDK 11的序号,按回车确认即可。
别忘了解决编译工具的版本匹配问题,不然编译和运行版本不一致也会出岔子:
sudo update-alternatives --config javac
同样选择OpenJDK 11对应的序号。
第三步:配置环境变量确保生效
有些时候系统会读错环境变量,咱们手动设置兜底:
- 打开bash配置文件:
nano ~/.bashrc
- 在文件末尾添加以下内容:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH
- 保存退出后,刷新环境变量:
source ~/.bashrc
第四步:验证配置是否成功
跑两个命令确认当前Java版本:
java -version javac -version
如果输出都是openjdk version "11.x.x"相关内容,说明配置正确,再运行你的程序应该就没问题了。
要是还报错?
那大概率是程序之前用Java 17编译过,或者依赖的库绑定了Java 17:
- 重新编译代码:用当前的
javac(11版本)重新编译所有.java文件 - 若使用Maven/Gradle等构建工具,记得把
sourceCompatibility和targetCompatibility都设置为11
内容的提问来源于stack exchange,提问作者mahomes15
相关产品推荐
相关产品推荐

