JNI函数报错:no implementation found for

一对括号引发的问题。

JNI函数报错:no implementation found for

如果用Android Studio新建一个支持C++的工程,它会生成一个默认的native-lib.cpp的文件,并且定义一个函数stringFromJNI。整个代码架构看起来是这个样子:

#include <jni.h>
#include <string>
using namespace std;

extern "C"

jstring Java_<someID>_stringFromJNI(JNIEnv *env, jobject) {
    String hello = "Hello from C++!";
    return env->NewStringUTF(hello.c_str());
}

我尝试加入第二个函数intFromJNI,并将函数代码块放置在第一个函数的后边。这个时候代码看起来是这个样子:

#include <jni.h>
#include <string>
using namespace std;

extern "C"

jstring Java_<someID>_stringFromJNI(JNIEnv *env, jobject) {
    String hello = "Hello from C++!";
    return env->NewStringUTF(hello.c_str());
}

jint Java_<someID>_intFromJNI(JNIEnv *env, jobject) {
    return 31415926;
}

此时运行会报错:no implementation found for int Java_<someID>_intFromJNI()...

Google一番后发现别人是把 extern "C" 后的代码放在了大括号{}里。于是照猫画虎将两个函数全部放在大括号里,问题解决。最终的代码看起来是这个样子:

#include <jni.h>
#include <string>
using namespace std;

extern "C" {
jstring Java_<someID>_stringFromJNI(JNIEnv *env, jobject) {
    String hello = "Hello from C++!";
    return env->NewStringUTF(hello.c_str());
}

jint Java_<someID>_intFromJNI(JNIEnv *env, jobject) {
    return 31415926;
}
}

C/C++的基础还不牢固,需要加强。