java - 错误 : parse error before "double" (cygwin)

标签 java c arrays java-native-interface cygwin

所以这是我使用的代码: 测试.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 中的“javah NativeMethods”生成。

求和.c:

double sumOfArr(double* arr) {
    int i;
    double sum = 0;
    for(i = 0; i < 10; i++) {
        sum =+ arr[i];
    }
    return 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"

我被困在这里试图完成这项工作几个小时...... 有什么问题吗?

最佳答案

你不能这样做,因为它不会编译

return sumOfArr(double *arr);

甚至这个

return sumOfArr((double *)arr);

因为 jdoubleArray 不是 double *,它有一个开始的标题。

您需要使用 Java 提供的辅助方法来访问此数组的元素。

关于java - 错误 : parse error before "double" (cygwin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13727969/

相关文章:

java - 如何从 Jama Matrix 对象转换为 double[][] - Java

java - 查找数组中任何重复的元素

java - 将依赖项注入(inject)到 Singleton 类中

c# - 如何编写一个可以用 `arr[key]` 索引的类(如数组)?

java - 从导入的 cplex 模型动态设置项因子

c - 收到错误 "undefined reference to"。你能解释一下这是什么意思以及我在哪里犯了错误吗?

c - 强制 C 中的特定结构大小

C rotl32 替代品

java - 在 gradle 中包含方法

java - DSE Solr : CopyField behavior