UnsatisfiedLinkError при загрузки библиотеки в java
У меня есть библиотека 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
Источник: Stack Overflow на русском