Java Smile库配置arpack-ng/openblas/javacpp依赖报错问题咨询
Smile机器学习库依赖配置错误解决方案
你遇到的方法不存在报错是Smile版本与Bytedeco系列依赖版本不匹配导致的,Smile内部的ARPACK调用逻辑是绑定特定版本的arpack-ng封装接口的,版本不对就会出现方法签名不匹配的问题。
错误原因说明
- 最初加不带
-platform后缀的依赖报native库找不到的错误,是因为不带后缀的依赖只包含接口定义,不会自带各平台的原生动态库,需要你手动在系统安装对应库或者单独引入对应平台的原生包,无法满足跨设备运行的需求。 -platform后缀的依赖会自动集成Windows、Linux、macOS等所有主流平台、x86/ARM等所有主流架构的原生动态库,打包后不需要目标设备额外安装任何系统依赖,只要有Java环境就能直接运行,完全符合你要的通用jar包的要求。
解决方案
- 确认你当前使用的Smile版本,查找该版本官方要求的javacpp依赖版本,不要自行随意指定版本号。常见的版本对应关系如下:
- Smile 2.5.x 系列对应javacpp版本为1.5.5
- Smile 2.6.x 系列对应javacpp版本为1.5.6
- Smile 3.0.x及以上系列对应javacpp版本为1.5.7及以上
- 推荐直接使用Smile官方提供的聚合依赖,避免手动逐个添加依赖出现版本错配,如果你使用Maven,直接添加如下依赖即可覆盖所有BLAS/LAPACK/ARPACK的跨平台依赖,不需要再单独添加javacpp、openblas、arpack-ng三个依赖:
<dependency> <groupId>com.github.haifengl</groupId> <artifactId>smile-netlib</artifactId> <version>替换为你实际使用的Smile版本号</version> </dependency>
- 如果你坚持要手动添加三个javacpp依赖,要保证三个依赖的版本完全和Smile要求的javacpp版本一致,不要出现版本混用的情况。
不需要使用dnf在系统安装任何openblas、arpack相关的软件,只要依赖配置正确,所有需要的原生库都会被打包进最终的jar包,可以跨设备直接运行。
内容的提问来源于stack exchange,提问作者Jurian Baas
相关产品推荐
相关产品推荐

