Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我得到:java.lang.unsatifiedLinkError_Java_C++_C_Java Native Interface_Unsatisfiedlinkerror - Fatal编程技术网

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

为什么我得到:java.lang.unsatifiedLinkError,java,c++,c,java-native-interface,unsatisfiedlinkerror,Java,C++,C,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;

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");
 }
}
我得到以下例外情况:

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)

在W:\elita\jnitesters\workspace\c\IntArray\bin\Debug目录中有一个名为IntArray.dll的dll文件,我看不到任何明显的东西,但有几件事需要尝试:

1) 在
System.load()
中指定完整路径堆栈跟踪有点混乱,因为它表示第17行(静态)调用了sumArray(),所以我不知道该怎么做

2) 在
System.load()周围放置一个try/catch块

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中,右键单击并选择项目属性->运行->虚拟机选项:-
Djava.library.path=lib/elita


然后从IDE本身运行程序。

一切正常!但有一件事你应该尝试一下。永久删除IDE代码::块创建的所有类型的文件(包括.dll文件)。然后重建你的程序。忽略如果有!那么它应该会起作用。

@UNNI是的。Netbeans+Code::Blocks我需要在哪里创建lib文件夹。这就在netbeans项目folderYes中…在lib文件夹下创建一个名为elite的文件夹并复制该文件夹。dllYour路径仍然只显示旧的。将其更改为lib/elita并通过IDE执行。在我通过netbeansHow执行后会出现相同的异常。这与在运行时手动设置路径有什么不同吗?即使我给出了完整的路径i获取异常:
java.lang.UnsatisfiedLinkError:no W:/elita/jnitesters/workspace/c/IntArray/bin/Debug/IntArray.dll(位于java.library.path中)。路径
是否在System.load()中获取异常?你在这上面加了try/catch?这可能表示它在该位置找不到.dll文件。你能仔细检查一下它是否存在并且可以访问吗?你能用它来检查你的DLL是否导出了正确的方法吗?
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)
 JNIEXPORT void JNICALL Java_Package_IntArray_sumArray(JNIEnv *env, jobject obj, jintArray arr)
 {
     /*Implement Native Method Here*/
 }