Apple M1 架构 LevelDB JNI 库加载失败问题及解决方案

最近换了 Apple M1 的笔记本,发现项目运行不起来了,报了下面的错误

Apple M1 架构 LevelDB JNI 库加载失败问题及解决方案

Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load library. Reasons: [no leveldbjni64-1.8 in java.library.path, no leveldbjni-1.8 in java.library.path, no leveldbjni in java.library.path, Can't load library: /var/folders/xp/zk2t87gj4q9263w39qk0mt380000gn/T/libleveldbjni-64-1-4043507736212128273.8]

报错原因是找不到 leveldbjni 文件到导致的,但是我的项目中已经引用了 leveljni 包,而且之前运行都是没问题的

<dependency>
  <groupId>org.fusesource.leveldbjni</groupId>
  <artifactId>leveldbjni-all</artifactId>
  <version>1.8</version>
</dependency>

查找资料发现,是因为我最近换了 Mac M1 的电脑,M1 是基于 arm64 架构的,而 leveldbjni-all 这个依赖,并不支持 arm64 架构,这就是报错的由来

好了,既然知道报错的原因,解决方案也很明确,找一下 leveldbjin 有没有发布新版本,支持 arm64 架构,但当我去 github 找到这个项目的时候,发现该项目已经停止维护了,最近一次提交时间是 7 年前,最新的 release 版本也是 1.8Apple M1 架构 LevelDB JNI 库加载失败问题及解决方案

issue 列表中也有人有人提过这个问题Apple M1 架构 LevelDB JNI 库加载失败问题及解决方案

arm64 跟 aarch64 本质上是同个东西,只是叫法不同

然后这个小哥基于人家给的教程重新构建了支持 aarch64 架构的 jarApple M1 架构 LevelDB JNI 库加载失败问题及解决方案

issue 链接:https://github.com/fusesource/leveldbjni/issues/102

但是我用这个老哥的 jar 还是报一样的错误,既然有人重新构建了 jar,那么也应该会有其他人构建。基于这个思路,到 maven 仓库中找找。结果果真被我找到了支持 arm64 架构的 jarApple M1 架构 LevelDB JNI 库加载失败问题及解决方案Apple M1 架构 LevelDB JNI 库加载失败问题及解决方案

用这个依赖替换原本的 leveldbjni-all,项目启动成功了,各项功能也正常

<!-- https://mvnrepository.com/artifact/io.github.tronprotocol/leveldbjni-all -->
<dependency>
    <groupId>io.github.tronprotocol</groupId>
    <artifactId>leveldbjni-all</artifactId>
    <version>1.18.3</version>
</dependency>

总结这次经验,尽管解决方案看似简单,但在实际开发过程中,面对此类架构兼容性问题时,快速定位问题并找到合适的解决方案显得尤为重要,所以拿出来跟大家分享

原文始发于微信公众号(huangxy):Apple M1 架构 LevelDB JNI 库加载失败问题及解决方案

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容