最近换了 Apple M1 的笔记本,发现项目运行不起来了,报了下面的错误
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.8
arm64 跟 aarch64 本质上是同个东西,只是叫法不同
然后这个小哥基于人家给的教程重新构建了支持 aarch64 架构的 jar
issue 链接:https://github.com/fusesource/leveldbjni/issues/102
但是我用这个老哥的 jar 还是报一样的错误,既然有人重新构建了 jar,那么也应该会有其他人构建。基于这个思路,到 maven 仓库中找找。结果果真被我找到了支持 arm64 架构的 jar
用这个依赖替换原本的 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