Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java C++;JNI不满意链接错误 我试图在C++中制作一个本地列表并在爪哇中使用它,我确信所有的东西都被声明为正确的,但是我得到了一个链接错误_Java_C++_C_Java Native Interface_Unsatisfiedlinkerror - Fatal编程技术网

Java C++;JNI不满意链接错误 我试图在C++中制作一个本地列表并在爪哇中使用它,我确信所有的东西都被声明为正确的,但是我得到了一个链接错误

Java C++;JNI不满意链接错误 我试图在C++中制作一个本地列表并在爪哇中使用它,我确信所有的东西都被声明为正确的,但是我得到了一个链接错误,java,c++,c,java-native-interface,unsatisfiedlinkerror,Java,C++,C,Java Native Interface,Unsatisfiedlinkerror,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 {

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 __cplusplus
extern "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
}
#endif

typedef 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);
#endif
#包括
#包括“List.h”
#包括
#ifndef包含在JAVA列表中
#定义包含的JAVA列表
#ifdef_uucplusplus
外部“C”{
#恩迪夫
/*
*类别:HelloJNI
*方法:你好
*签字:()五
*/
JNIEXPORT jlong JNICALL Java_Java_List_init_List(JNIEnv*,jobject,jobject);
JNIEXPORT作业对象JNICALL Java_Java_List_List_get(JNIEnv*env、作业对象thisObj、jint索引、jlong List);
#ifdef_uucplusplus
}
#恩迪夫
类型定义结构Java_列表Java_列表;
结构Java_列表
{
作废*清单;
jclass类型;
};
void init_Java_List(Java_List*jList,jclass类型);
jobject java_list_get(java_list*jList,int index);
#恩迪夫
C++源代码

#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;
}

jobject java_list_get(Java_List *jList, int index)
{
    List<jobject> *list = (List<jobject> *) jList->list;
    return *(list->get(index));
}
#包括
#包括“Java_List.h”
#包括“pch.h”
外部“C”
{
JNIEXPORT jlong JNICALL Java_Java_List_init_List(JNIEnv*env,jobject thisObj,jobject类类型)
{
jclass type=env->GetObjectClass(类类型);
Java_List*List=(Java_List*)malloc(sizeof(Java_List));
初始化Java_列表(列表,类型);
返回(jlong)列表;
}
JNIEXPORT作业对象JNICALL Java\u Java\u List\u List\u get(JNIEnv*env、作业对象thisObj、jint索引、jlong列表)
{
返回java\u list\u get((java\u list*)list,(int)index);
}
}
/*JNIAPI*/
void init_Java_List(Java_List*jList,jclass类型)
{
jList->list=malloc(sizeof(list));
新建(jList->list)列表();
jList->type=type;
}
jobject java_list_get(java_list*jList,int index)
{
列表*列表=(列表*)jList->List;
返回*(列表->获取(索引));
}
我正在使用VisualStudio进行这个项目,这个项目构建了多个文件,不仅仅是dll,我不知道这是否是问题所在。

您的Java类名和方法名包含下划线,这违反了命名约定


如果你坚持保存它们,你需要把C++函数的名称改为<代码> javajjava1ListIn ItIL1List。请注意

List
List
之前的
1
s,它告诉链接器将前面的下划线解释为文字下划线字符,而不是命名分隔符。

dll是否包含Java正在寻找的符号?使用[dependency explorer]()检查是否使用
javah
工具生成这些JNI函数签名?还是新的
javac
选项?还是你亲手制作的?如果是,为什么?