UnsatisfiedLinkError при загрузки библиотеки в java

Рейтинг: 1Ответов: 0Опубликовано: 25.08.2023

У меня есть библиотека libs0_x64.dll и libs0_x32.dll, я их копирую в temp директорию

File tempFile = new File(System.getProperty("java.io.tmpdir"), "natvs.dll");

        String arch = System.getProperty("os.arch");

        try (InputStream inputStream = Natives.class.getResourceAsStream("/libs/" + (arch.contains("64") ? "libs0_x64.dll" : "libs0_x86.dll"));
             FileOutputStream outputStream = new FileOutputStream(tempFile)) {
            byte[] buffer = new byte[4096];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

после этого вызываю метод для загрузки библиотеки

System.load(tempFile.getAbsolutePath());

вроде все нормально, но ниже есть нативный метод

public native String window0();

но при его вызове, будет ошибка

Exception in thread "main" java.lang.UnsatisfiedLinkError: me.doxxed.natives.Natives.window0()Ljava/lang/String;
    at me.doxxed.natives.Natives.window0(Native Method)
    at Test.main(Test.java:6)

вот код самой библиотеки:

#include <iostream>
#include <windows.h>
#include <string>
#include <jni.h>
#pragma comment(lib, "jawt.lib")
#pragma comment(lib, "jvm.lib")
using namespace std;

JNIEXPORT jstring JNICALL Java_me_doxxed_natives_Natives_window0(JNIEnv* env, jobject obj)
{
    char nativeString[256];
    HWND hwnd = GetForegroundWindow();
    GetWindowText(hwnd, nativeString, sizeof(nativeString));
    return env->NewStringUTF(nativeString);
}

но так же ошибка, если что мой метод window0 находится в me.doxxed.natives, в классе Natives

Ответы

Ответов пока нет.