为什么我得到:java.lang.UnsatisfiedLinkError

Suh*_*pta 7 c c++ java java-native-interface unsatisfiedlinkerror

Java代码:

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");
 }
}
Run Code Online (Sandbox Code Playgroud)

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;
          }
Run Code Online (Sandbox Code Playgroud)

然后我运行命令:

java -Djava.library.path=W:\elita\jnitesters\workspace\c\IntArray\bin\Debug Package.IntArray
Run Code Online (Sandbox Code Playgroud)

我得到以下例外:

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)
Run Code Online (Sandbox Code Playgroud)

在目录W:\ elita\jnitesters\workspace\c\IntArray\bin\Debug中有一个名为IntArray.dllDLL文件

pro*_*eve 0

一切安好 !但有一件事你应该尝试。永久删除 IDE code::blocks创建的各种文件(包括 .dll 文件)。然后重建你的程序。省略宏(如果有)!那么它应该可以工作。