我正在嘗試在 c++ 中創(chuàng)建一個(gè)本機(jī)列表并在 java 中使用它,我相當(dāng)確定所有內(nèi)容都聲明正確,但我收到鏈接錯(cuò)誤Java異常:Exception in thread "main" java.lang.UnsatisfiedLinkError: Java_List.init_list(Ljava/lang/Object;)J at Java_List.init_list(Native Method) at Java_List.main(Java_List.java:13)Java源碼public class Java_List{ static { System.loadLibrary("JAVA_JNI_FTC"); } public native long init_list(Object a); public static void main(String[] args) { Java_List list = new Java_List(); System.out.println(list.init_list(list)); }}頭文件#include <jni.h>#include "List.h"#include <new>#ifndef _Included_JAVA_LIST#define _Included_JAVA_LIST#ifdef __cplusplusextern "C" {#endif /* * Class: HelloJNI * Method: sayHello * Signature: ()V */ JNIEXPORT jlong JNICALL Java_Java_List_init_list(JNIEnv *, jobject, jobject); JNIEXPORT jobject JNICALL Java_Java_List_list_get(JNIEnv *env, jobject thisObj, jint index, jlong list);#ifdef __cplusplus}#endiftypedef struct Java_List Java_List;struct Java_List{ void *list; jclass type;};void init_Java_List(Java_List *jList, jclass type);jobject java_list_get(Java_List *jList, int index);#endifC++源碼#include <jni.h>#include "Java_List.h" #include "pch.h"extern "C"{ JNIEXPORT jlong JNICALL Java_Java_List_init_list(JNIEnv *env, jobject thisObj, jobject classType) { jclass type = env->GetObjectClass(classType); Java_List *list = (Java_List *)malloc(sizeof(Java_List)); init_Java_List(list, type); return (jlong)list; } JNIEXPORT jobject JNICALL Java_Java_List_list_get(JNIEnv *env, jobject thisObj, jint index, jlong list) { return java_list_get((Java_List *)list, (int)index); }}/* jni api*/void init_Java_List(Java_List *jList, jclass type){ jList->list = malloc(sizeof(List<jobject>)); new (jList->list) List<jobject>(); jList->type = type;}我在這個(gè)項(xiàng)目中使用 Visual Studio,該項(xiàng)目構(gòu)建多個(gè)文件而不僅僅是 dll,我不知道這是否是問題。 文件
1 回答

瀟湘沐
TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
Java 類名和方法名包含下劃線,這違反了命名約定。
如果您堅(jiān)持保留它們,則需要將 C++ 函數(shù)的名稱更改為Java_Java_1List_init_1list
. 請注意和1
之前的 s ,它告訴鏈接器將前面的下劃線解釋為文字下劃線字符而不是命名分隔符。List
list
添加回答
舉報(bào)
0/150
提交
取消