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

从Kotlin调用RocksDB LRUCache遇UnsatisfiedLinkError问题求助

RocksDB LRUCache在Kotlin中初始化抛出UnsatisfiedLinkError的问题

问题描述

我尝试在Kotlin中创建RocksDB的LRUCache实例,代码如下:

val cache = org.rocksdb.LRUCache(500L * 1024L * 1024L)

运行后抛出异常:

Exception in thread "main" java.lang.UnsatisfiedLinkError: 'long org.rocksdb.LRUCache.newLRUCache(long, int, boolean, double)'
    at org.rocksdb.LRUCache.newLRUCache(Native Method)
    at org.rocksdb.LRUCache.<init>(LRUCache.java:74)
    ...(省略部分栈信息)

查看LRUCache内部Java代码,其构造方法调用了一个私有本地静态方法:

private native static long newLRUCache(final long capacity,
      final int numShardBits, final boolean strictCapacityLimit,
      final double highPriPoolRatio);

疑问:从Kotlin调用该方法是否不被支持?

问题解答

这个问题和Kotlin调用无关,本质是RocksDB的JNI本地链接库未正确加载。

原因分析

  • UnsatisfiedLinkError的核心是JVM找不到对应native方法的本地实现,说明RocksDB的.so/.dll等native库没有被正确加载到进程中。
  • Kotlin完全兼容调用Java类的构造方法,LRUCache的单参数构造内部调用四参数native方法的逻辑,和语言无关,不存在调用权限或语法层面的限制。

解决步骤

  • 确保依赖引入正确:使用Maven/Gradle时,必须引入rocksdbjni包(而非仅rocksdb-core),该包包含对应操作系统平台的native库。
  • 检查native库加载路径:可以通过JVM参数-Djava.library.path指定native库的所在目录,或确认依赖包中的native库已被解压到Classpath可访问的位置。
  • 版本完全匹配:RocksDB的Java包版本和native库版本必须严格一致,版本不匹配会导致方法签名不对应,同样触发该异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:15:36