java - JNA:在编译的 jar 中找不到指定的模块
问题描述
我的 java Spring Boot 项目中有一个 C++ .dll
。一切看起来都很好,并且在.dll
以下情况下调用方法:
- 我从 IDE 运行应用程序
- 我编译文件
mvn pack & java -jar target/Project-0.0.1-SNAPSHOT.jar
我试图将项目复制到另一台机器上,但我遇到了这个问题:
当我从 IDE 运行应用程序时,一切正常
当我在项目上运行相同的命令
mvn pack & java -jar target/Project-0.0.1-SNAPSHOT.jar
并且它被称为.dll
方法时,它会因消息错误而崩溃:
java.lang.UnsatisfiedLinkError: The specified module could not be found.
at com.sun.jna.Native.open(Native Method) ~[jna-4.1.0.jar!/:4.1.0 (b4)]
at com.sun.jna.Native.open(Native.java:1759) ~[jna-4.1.0.jar!/:4.1.0 (b4)]
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:260) ~[jna-4.1.0.jar!/:4.1.0 (b4)]
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398) ~[jna-4.1.0.jar!/:4.1.0 (b4)]
at com.sun.jna.Library$Handler.<init>(Library.java:147) ~[jna-4.1.0.jar!/:4.1.0 (b4)]
at com.sun.jna.Native.loadLibrary(Native.java:412) ~[jna-4.1.0.jar!/:4.1.0 (b4)]`.
注意:我在两台机器上都有 Microsoft Visual C++ 2017 Redistributable。
如果我在项目根目录中移动 .dll 文件,它就可以工作。
解决方案
您在项目中使用 JNA。JNA 需要正确安装一些本机库。例如,它需要jnidispatch.dll
Windows 平台。
对于您的情况,您需要下载所需的原生库,例如https://github.com/java-native-access/jna/blob/master/lib/native/win32,并将其放入可以搜索的目录中通过你的 JAVA。
推荐阅读
- javascript - 从 React 16 开始,是否鼓励使用无状态组件?
- entity-framework - 使用实体框架创建自定义模型,该模型不是数据库中任何表的模型
- javascript - 如何使用 Base64 编码 HTMLTableSectionElement 并附加解码值
- web-scraping - Scrapy Spider 登录问题
- javascript - html 验证似乎不起作用
- javascript - 通过动态值更改 CSS
- java - java - 为什么java eclipse中的布尔变量需要大括号?
- vue.js - Webpack-simple:SASS 变量不会在页面上转换为它们的值
- django - 了解 Django 管理器
- python - 几个月内写几天的程序