我的代码编译,但是当我调用C ++子例程时,应用程序死于UnsatisfiedLinkError。
在CMakeLists.txt中:
add_library( # Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
src/main/cpp/crlTCheckkey.cpp)
在Tab1.java中:
package com.labyrinthsys.crltext;
String statusString;
String keyPath;
statusString = crlTCheckkey(keyPath);
...
public native String crlTCheckkey(String keyPath);
在crlTCheckkey.cpp中:
#include <jni.h>
#include <string>
using namespace std;
extern "C" JNIEXPORT jstring
JNICALL
Java_com_labyrinthsys_crltext_Tab1_crlTCheckkey(
JNIEnv *env,
jobject, /* this */
jstring keyFilePath) {
我得到的错误是:
java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String com.labyrinthsys.crltext.Tab1.crlTCheckkey(java.lang.String) (tried Java_com_labyrinthsys_crltext_Tab1_crlTCheckkey and Java_com_labyrinthsys_crltext_Tab1_crlTCheckkey__Ljava_lang_String_2)
at com.labyrinthsys.crltext.Tab1.crlTCheckkey(Native Method)
at com.labyrinthsys.crltext.Tab1.onClick(Tab1.java:118)
我在当地问过没有运气。我错过了什么?谢谢!
答案 0 :(得分:1)
这非常烦人,但是我从构建中完全删除了有问题的cpp文件,然后从头开始再次将它带入,并且现在它以某种方式运行。