在JAVA中用JNI调用C++程序报错,说找不到所依赖的库。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在JAVA中用JNI调用C++程序报错,说找不到所依赖的库。相关的知识,希望对你有一定的参考价值。

Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\cygwin\cpscpu\tryjni1\pfjni.dll: Can't find dependent libraries
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1939)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1864)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1854)
at java.lang.Runtime.loadLibrary0(Runtime.java:845)
at java.lang.System.loadLibrary(System.java:1084)
at pfjni.main(pfjni.java:11)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Process finished with exit code 1
我把有关的dll文件都已近放在java的工程目录下了。

dll放到系统或者jre目录里使用System.loadLibrary加载,绝对路径使用System.load加载 参考技术A pfjni.dll这个是在你的java工程项目下
还是你的java工程项目下的dll在引用这个dll而找不到这个dll追问

pfjni.dll这个是在java工程项目下,有java程序要引用pfjni.dll。

追答

那你的程序调用的时候是把路径写死了?
程序报错的信息显示你写的是绝对路径啊

本回答被提问者采纳

Java程序通过JNI调用C++程序的方法

JNI是什么

   JNI,全称为Java Native Interface,即Java本地接口,JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C++机型交互。即可以在Java代码中调用C/C++等语言的代码或者在C/C++代码中调用Java代码。由于JNI是JVM规范的一部分,因此可以将我们写的JNI的程序在任何实现了JNI规范的Java虚拟机中运行。同时,这个特性使我们可以复用以前用C/C++写的大量代码JNI是一种在Java虚拟机机制下的执行代码的标准机制。代码被编写成汇编程序或者C/C++程序,并组装为动态库。也就允许非静态绑定用法。这提供了一个在Java平台上调用C/C++的一种途径。

JNI的应用场景

   JNI的应用场景主要有:

  1. 需要提升效率时,C++的运行效率比java快,需要优化算法时可以考虑C++;
  2. 需要控制关键算法时,java源码容易被人破解,C++编译完了就不能反编译了;
  3. 需要控制授权时,可以考虑用C++编写授权部分代码。

如何在windows平台和Linux平台上进行JNI编程

在windows平台上进行JNI编程

  首先确保在windows装有JDK(Java 语言的软件开发工具包)。本文的代码例子适配的windows JDK版本是jdk-8u181-windows-x64。本章节示范在windows平台上使用IntelliJ IDEA配合VisualStud

以上是关于在JAVA中用JNI调用C++程序报错,说找不到所依赖的库。的主要内容,如果未能解决你的问题,请参考以下文章

带有 JNI 的 C++ 应用程序抛出错误“找不到 jvm.dll。重新安装应用程序可以修复....”

Java程序通过JNI调用C++程序的方法

Javatest报错为啥说找不到测试类?

JNI 通过多线程从 C++ 调用 Java

import java.io.*; 怎么没有导入类成功呢?编译的时候报错说找不到输入类。

JNI和NDK编程