gpt4 book ai didi

java - c-Java : UnsatisfiedLinkError on natie method call

转载 作者:行者123 更新时间:2023-11-30 18:14:00 25 4
gpt4 key购买 nike

我正在学习JNI。我创建了一个简单的 java 类:

package asd.jni;

public class PrintJNI {

public native String print();

static{
try{
System.out.println("loading libPrint");
System.load("C:/DeLauri/WorkSpaceC_CPP/Print2/Debug/libPrint.dll");
System.out.println("libPrint loaded");
}catch(UnsatisfiedLinkError e){
System.out.println("error "+e.toString());
e.printStackTrace();
}
}
}

手动调用 javah -jni 我创建 asd_jni_PrintJNI.h:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class asd_jni_PrintJNI */

#ifndef _Included_asd_jni_PrintJNI
#define _Included_asd_jni_PrintJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: asd_jni_PrintJNI
* Method: print
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_asd_jni_PrintJNI_print
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

在 Eclipse CDT 中,我创建了一个名为“Print”的 C 项目,并在其中创建了一个 Print.c:

#include <jni.h>
#include <stdio.h>
#include "asd_jni_PrintJNI.h"

JNIEXPORT jstring JNICALL Java_asd_jni_PrintJNI_print (JNIEnv *env, jobject obj) {

printf("aasdasdadasd");
const char rtn[10] = "Hello \n";

printf("aasdasdadasd");
return (*env)->NewStringUTF(env, rtn);
}

一切都编译成功,但是当我运行我的主类时: 封装asd;

import asd.jni.PrintJNI;

public class StartPrintJNI {

/**
* @param args
*/
public static void main(String[] args) {

try{
PrintJNI print = new PrintJNI();

System.out.println("call");
String cStrg = print.print();
System.out.println("called");
System.out.println(cStrg);
}catch(UnsatisfiedLinkError e){
System.out.println("error in main "+e.toString());
e.printStackTrace();
}catch(Exception e){
System.out.println("2 "+ e.getMessage());
e.printStackTrace();
}

}

}

我有以下错误:

loading libPrint
libPrint loaded
call
error in main java.lang.UnsatisfiedLinkError: asd/jni/PrintJNI.print()Ljava/lang/String;
java.lang.UnsatisfiedLinkError: asd/jni/PrintJNI.print()Ljava/lang/String;
at asd.StartPrintJNI.main(StartPrintJNI.java:16)

有人可以帮助我吗?谢谢

更新:我在 Eclipse/Eclipse CDT IDE 中使用 MinGW 在 Windows 7 上进行这些测试

最佳答案

将 DLL 与 MingW 链接时,使用

-Wl,--export-all-symbols -Wl,--add-stdcall-alias -m32 -shared

导出函数的未修饰副本。

不要更改你的方法签名;你掩盖了你的问题。

关于java - c-Java : UnsatisfiedLinkError on natie method call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20070995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com