为什么我得到:java.lang.UnsatisfiedLinkError
why am i getting : java.lang.UnsatisfiedLinkError
Java Code :
package Package;
public class IntArray {
private native int sumArray(int[] arr);
public static void main(String args[]) {
IntArray p = new IntArray();
int arr[] = new int[10];
for(int i=0 ; i<10 ; i++) {
arr[i] = i;
}
int sum = p.sumArray(arr); // pass the array to the c function sumArray
System.out.println("Sum is : " + sum);
}
static { // 17th statement
System.loadLibrary("IntArray");
}
}
C 代码 :
#include<stdio.h>
#include "Package_IntArray.h"
jint Java_Package_IntArray_sumArray(JNIEnv *env, jobject obj, jintArray arr)
{
jint buf[10];
jint i, sum = 0;
(*env)->GetIntArrayRegion(env, arr, 0, 10, buf);
for (i = 0; i < 10; i++) {
sum += buf[i];
}
return sum;
}
然后我运行命令:
java -Djava.library.path=W:elitajnitestersworkspacecIntArraybinDebug Package.IntArray
我得到以下例外:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Package.IntArray.sumArray([I)I
at Package.IntArray.sumArray(Native Method)
at Package.IntArray.main(IntArray.java:17)
有一个名为 IntArray 的 dll 文件.dll 在目录 W:\elita\jnitesters\workspace\c\IntArray\bin\Debug
一切都很好!但是有一件事你应该尝试。永久删除由IDE代码::blocks创建的各种文件(包括.dll文件)。然后重新生成程序。省略宏(如果有)!那么它应该可以工作。
嗯,我看不到任何明显的东西,但有几件事可以尝试:
1)在System.load()
中指定完整路径 堆栈跟踪有点令人困惑,它指示 sumArray() 被第 17 行调用,这是静态的,所以我不知道该怎么做。
2)在你的System.load()
周围放一个尝试/捕获块
3)尝试像这样定义你的方法:
JNIEXPORT void JNICALL Java_Package_IntArray_sumArray(JNIEnv *env, jobject obj, jintArray arr)
{
/*Implement Native Method Here*/
}
也许该方法未导出到您的.dll文件中,这就是找不到它的原因。
您已经在 Netbeans 项目的 lib
下创建了一个文件夹elita
。将您的.dll复制到该文件夹。现在,在 NetBeans IDE 中,右键单击并选择"项目属性"->"运行>VM 选项:- Djava.library.path=lib/elita
然后从 IDE 本身运行程序。
相关文章:
- java.lang.IndexOutOfBoundsException with JNA
- Android Studio 3.1.2 - 无法运行C++子例程"No implementation found for Java.lang.String..."
- java.lang.UnsatisfiedLinkError: Abc.greetings()V
- java.lang.Field 等效于 c++ 中
- 为什么日食总是发生错误"An internal error occurred during: "通知选择侦听器". java.lang.StackOverflowError"
- java.lang.UnsatisfiedLinkError:未找到实现
- JNI GetMethodID 调用,带有挂起的异常 java.lang.ClassNotFoundException
- java.lang.UnsatisfiedLinkError: dlopen failed: 无法加载"libPrivateSsl.so"所需的库"libcrypto.so.1.0.0";
- 单元测试环境中的"java.lang.UnsatisfiedLinkError: *.so: Can't find dependent libraries"
- JNI 代码返回字符串,但得到错误 java.lang.UnsatisfiedLinkError: com.packag
- 如何在没有System32的情况下解决"java.lang.UnsatisfiedLinkError:找不到依
- JNA从DLL调用C++对象-java.lang.IollegalArgumentException:Structure
- 线程中的异常 "main" java.lang.UnsatisfiedLinkError: no JNTIest in java.library.path
- jni java.lang.unsatisfiedlinkerror,无法链接方法
- 从WordCount Hadoop示例调用Helloworld Jni函数,给出错误Java.lang.unsatisf
- 在hadoop 2.7.4的自定义排序类中调用C函数,给出Java.lang.unsatisfiedlinkerror
- 在运行时获得Java.lang.unsatisfiedlinkerror
- AndroidRuntime: java.lang.UnsatisfiedLinkError: Native metho
- 线程"main" java.lang.UnsatisfiedLinkError: Native.initiate(I)V 从 Java 运行本机 dll 时
- JNI : 线程"AWT-EventQueue-0" java.lang.UnsatisfiedLinkError 中的异常