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 库加载失败问题及解决方案

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/260389.html

(0)
土豆大侠的头像土豆大侠

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!