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

Oracle SQL Developer缺失libjvm.so问题及多JDK配置咨询

问题背景与排查过程

在Manjaro 22.0.1系统中,尝试用OpenJDK 17.0.6(2023-01-17)运行Oracle SQL Developer 22.2.1,同时测试了OpenJDK 11.0.18(2023-01-17),两个版本均通过pacman从Arch官方仓库安装(对应包为jre17-openjdk和jre11-openjdk),运行时均报错:

> oracle-sqldeveloper
Error occurred during initialization of boot layer
java.lang.UnsatisfiedLinkError: /usr/lib/jvm/java-17-openjdk/lib/libnio.so: /usr/lib/jvm/java-17-openjdk/lib/libnio.so: undefined symbol: reuseport_available

进一步检查libnio.so依赖,发现实际是找不到libjvm.so:

> ldd /usr/lib/jvm/java-17-openjdk/lib/libnio.so
        linux-vdso.so.1 (0x00007ffe0f1d7000)
        libjava.so => /usr/lib/jvm/java-17-openjdk/lib/libjava.so (0x00007f7354ce7000)
        libnet.so => /usr/lib/jvm/java-17-openjdk/lib/libnet.so (0x00007f7354ccf000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007f7354abb000)
        /usr/lib64/ld-linux-x86-64.so.2 (0x00007f7354d23000)
        libjvm.so => not found
        libjvm.so => not found

libjvm.so实际路径为/usr/lib/jvm/java-17-openjdk/lib/server/libjvm.so,设置LD_LIBRARY_PATH后问题解决。

咨询问题
  1. 这是否属于JDK安装问题?正常情况下是否应自动关联该文件?
  2. 日常需使用2-3个不同版本的JDK(OpenJDK及GraalVM 8、11、17),每个版本都有独立lib目录,如何最优设置各版本的LD_LIBRARY_PATH?
  3. 目前仅SQL Developer出现此问题,已在~/.sqldeveloper/22.2.1/product.conf中指定了Java版本,是否可在此文件中配置库路径?尝试-Djava.library.path暂未生效。
解决方案与解答

问题1:是否属于JDK安装问题?

不属于标准的JDK安装问题。Arch系发行版的OpenJDK包默认不会将lib/server目录加入系统默认库搜索路径,因为JVM通常会自行处理该路径的加载,大部分Java应用也能正常识别。但SQL Developer启动时的类加载逻辑存在特殊处理,导致无法自动找到该路径下的libjvm.so,才触发了这个错误。

问题2:多JDK版本下的LD_LIBRARY_PATH最优设置

不要全局设置LD_LIBRARY_PATH,避免不同JDK版本的库冲突,推荐两种方式:

  • 单应用临时设置:启动SQL Developer时,临时指定对应JDK的库路径,示例:
    LD_LIBRARY_PATH=/usr/lib/jvm/java-17-openjdk/lib/server oracle-sqldeveloper
    
  • JDK切换工具+脚本封装:
    1. 用archlinux-java或sdkman管理默认JDK版本,切换时自动适配库路径;
    2. 为每个JDK版本创建专属启动脚本,比如针对SQL Developer的脚本:
      #!/bin/bash
      export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
      export LD_LIBRARY_PATH=$JAVA_HOME/lib/server
      oracle-sqldeveloper
      
      给脚本添加执行权限后,通过脚本启动即可,不同JDK版本对应不同脚本。

问题3:在product.conf中配置库路径

可以在product.conf中配置,但不能用-Djava.library.path(该参数针对Java层面的库加载,而此处是系统级动态库依赖问题),需直接设置环境变量:
打开~/.sqldeveloper/22.2.1/product.conf,添加以下内容:

SetJavaHome /usr/lib/jvm/java-17-openjdk
SetEnv LD_LIBRARY_PATH /usr/lib/jvm/java-17-openjdk/lib/server

保存后重启SQL Developer即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:05:14