gpt4 book ai didi

java.lang.UnsatisfiedLinkError : org. thotheolh.jche.NativeBridge.loadPKCS11Module(Ljava/lang/String;)V

转载 作者:太空宇宙 更新时间:2023-11-04 06:08:52 25 4
gpt4 key购买 nike

我已经查看了 StackOverFlow 和其他搜索引擎中的 UnsatisfiedLinkError 帮助,但解决方案并不能解决问题,所以我将在这里说明。

我尝试对 PKCS11 DLL 库进行 JNI 调用,但收到以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.thotheolh.jche.NativeBridge.loadPKCS11Module(Ljava/lang/String;)V
at org.thotheolh.jche.NativeBridge.loadPKCS11Module(Native Method)
at org.thotheolh.jche.NativeBridge.load(NativeBridge.java:40)
at org.thotheolh.jche.NativeBridge.<init>(NativeBridge.java:29)
at org.thotheolh.jche.exception.test.PKCS11GenericTest.main(PKCS11GenericTest.java:27)
Java Result: 1

我用来执行以下“ native ”调用的 native 桥接片段:

NativeBridge.java

public class NativeBridge {

private String pkcs11Module;
private String pkcs11JavaWrapper = "libJPKCS11";

public NativeBridge(String pkcs11Module) throws IOException, NoSuchFieldException {
this.pkcs11Module = pkcs11Module;
load();
}

public void load() throws IOException, NoSuchFieldException {
System.loadLibrary(pkcs11JavaWrapper);
loadPKCS11Module(pkcs11Module);
}

public synchronized native void loadPKCS11Module(String location) throws IOException;
}

javah 生成的头文件片段:

JCHE.h

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

#ifndef _Included_org_thotheolh_jche_NativeBridge
#define _Included_org_thotheolh_jche_NativeBridge
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_thotheolh_jche_NativeBridge
* Method: loadPKCS11Module
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_org_thotheolh_jche_NativeBridge_loadPKCS11Module
(JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

C 文件片段:

JCHE.c

#include <jni.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include "JCHE.h"

const char *pkcs11ModuleFileLoc;
HMODULE pkcs11;

JNIEXPORT void JNICALL Java_org_thotheolh_jche_NativeBridge_loadPKCS11Module
(JNIEnv *env, jobject obj, jstring location) {
printf("inside native method\n");
pkcs11ModuleFileLoc = (*env)->GetStringUTFChars(env, location, (jboolean *)0);
printf("%s", pkcs11ModuleFileLoc);
//pkcs11 = LoadLibraryA(pkcs11ModuleFileLoc);
//printf("\nLoaded PKCS11 Lib");
}

我尝试检查 Java 中加载的库,发现它们已经加载,但不知何故,尽管查看了许多其他可用方法来尝试解决此问题,但我还是收到了所描述的错误。

最佳答案

我尝试过,但无法重现您的问题(但我使用 Linux 并将 System.loadLibrary("libJPKCS11"); 更改为 System.loadLibrary("JPKCS11");,请参见下文,但我确信这不会导致您的问题,因为错误消息会有所不同)。

您收到的错误消息意味着可以加载库,因此调用 System.loadLibrary() 没有问题。

您确定 JCHE.objlibJPKCS11.dll 的成员,即 libJPKCS11.dll 链接正确,并且 JCHE.obj 是使用用于创建 DLL 的正确标志构建的吗?对我来说,该消息看起来好像库已正确加载,但不包含函数 Java_org_thotheolh_jche_NativeBridge_loadPKCS11Module()。因此,您可能需要检查 libJPKCS11.dll 实际上是否“完整”且“最新”。

顺便说一下,您可以考虑删除 lib 前缀。 System.loadLibrary 负责处理前缀和后缀。您只需使用System.loadLibrary("foo");。然后,它在 POSIX 上加载 libfoo.so ,在 Windows 上加载 foo.dll 。否则它会尝试在 POSIX 上加载 liblibfoo.so ,这感觉很奇怪。

关于java.lang.UnsatisfiedLinkError : org. thotheolh.jche.NativeBridge.loadPKCS11Module(Ljava/lang/String;)V,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28978030/

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