2

これが私が使用しているコードです:Test.java:

public class HelloWorld {
    static {
        System.loadLibrary("SumLib");
    }

    public static void main(String args[])
    {
        Random rand = new Random();
        double[] arr = new double[10];
        for(int i = 0; i < 11; i++) {
            arr[i] = rand.nextDouble();
        }
        NativeMethods.sumOfArr(arr);
}
}

NativeMethods.java:

public static native double sumOfArr(double[] arr);

NativeMethods.c:

JNIEXPORT jdouble JNICALL Java_NativeMethods_sumOfArr(JNIEnv *env, jclass cls, jdoubleArray arr) {
    return sumOfArr(double *arr);
}

NativeMethods.hは、cygwinの「javahNativeMethods」によって生成されます。

sum.c:

double sumOfArr(double* arr) {
    int i;
    double sum = 0;
    for(i = 0; i < 10; i++) {
        sum =+ arr[i];
    }
    return sum;
}

sum.h:

double sumOfArr(double *arr);

cygwinでSumLib.dllをコンパイル/作成しようとすると、問題が発生し、次のエラーが発生します。

$ gcc -Wl,-add-stdcall-alias -mno-cygwin -shared -I"/cygdrive/c/jdk1.7.0_09/include" -I"/cygdrive/c/jdk1.7.0_09/include/win32" -o SumLib.dll sum.c NativeMethods.c
NativeMethods.c: In function `Java_NativeMethods_sumOfArr':
NativeMethods.c:19: error: parse error before "double"

私はここで数時間この仕事をしようとして立ち往生しています...何が間違っている可能性がありますか?

4

1 に答える 1

0

コンパイルされないため、これを行うことはできません

return sumOfArr(double *arr);

またはこれさえ

return sumOfArr((double *)arr);

jdoubleArrayはないのでdouble *、開始用のヘッダーがあります。

この配列の要素にアクセスするには、Java が提供するヘルパー メソッドを使用する必要があります。

于 2012-12-05T17:07:58.150 に答える