我有以下内容:
jniinterface.h
#include <jni.h>
extern "C" {
JNIEXPORT jdouble JNICALL Java_com_gleason_finance_JniLib_init(JNIEnv * env, jobject obj, jdouble SO, jdouble U, jdouble D, jdouble R);
};
jniinterface.cpp
#include "jniinterface.h"
JNIEXPORT jdouble JNICALL Java_com_gleason_finance_JniLib_init(JNIEnv * env, jobject obj, jdouble SO, jdouble U, jdouble D, jdouble R, jint N, jdouble K)
{
return 0.0;
}
但是这会返回以下内容:
E/AndroidRuntime( 3638): java.lang.UnsatisfiedLinkError: Native method not found: com.me.finance.JniLib.init:(DDDDID)D
如果我将jniinterface.cpp更改为:
,它可以正常工作#include <jni.h>
extern "C" JNIEXPORT jdouble JNICALL Java_com_gleason_finance_JniLib_init(JNIEnv * env, jobject obj, jdouble SO, jdouble U, jdouble D, jdouble R, jint N, jdouble K)
{
return 0.0;
}
它有效,我是C ++的新手,所以我做错了什么?我应该删除标题吗?为什么它不能与标题一起使用?
不确定为什么这会有所帮助,因为它显然是一个C ++问题(因为C修复)但是在这里:
public class JniLib {
static {
System.loadLibrary("fin");
}
public static native double init(double SO, double U, double R, double D, int N, double k);
}
答案 0 :(得分:2)
在jniinterface.h中,函数的返回类型为void。它需要jdouble!您可以将jniinterface.cpp保留为第一个片段中的内容。
编辑:您还缺少头文件中的两个参数。 (名为N和K)
#include <jni.h>
extern "C" {
JNIEXPORT jdouble JNICALL Java_com_gleason_finance_JniLib_init(JNIEnv * env, jobject obj, jdouble SO, jdouble U, jdouble D, jdouble R, jint N, jdouble K);
};
每当你看到这样的错误时,你要做的第一件事就是仔细检查方法签名 - 名称,包,参数和返回类型。任何小错误都会导致这个一般错误!