使用JNA封装Java映射接口后,由Java程序通过JNI/JNA加载dll库文件调用C接口,出现“java.lang.UnsatisfiedLinkError:包名.类.方法(参数)”问题。
通过JNI/JNA方式封装映射接口,实际上就是将Java的class文件编译成C语言的xxxx.h头文件,之后根据.h头文件来编写源文件。
所以这个过程中就会有参数对应、包名、路径、方法名称等的一致性要求。否则不是找不到方法,就是实例化不了。
还有2种常见的错误
1.java.lang.UnsatisfiedLinkError: no HelloWorld in java.library.path
2. Exception in thread "main" java.lang.UnsatisfiedLinkError: xxx.xxx.Hello.myprint()V
错误原因:
错误1,主要是没有办法path路径中加载。
错误2,主要是没有myprint方法。
3 . 如果类库加载没有问题,排除dll本身问题(网上不少人遇到),dll没有问题,加载路径也没有问题,不能连接到方法。这个在命令行的时候不容易发现问题,移到生产环境中容易出现,可能你已经猜到了,就是包路径,类的包路径要和生成头文件类包路径一致。
Java通过JNI/JNA加载dll库文件调用C接口 出现“java.lang.UnsatisfiedLinkError:包名.类.方法(参数)”问题