मैं विंडोज एक्सपी चला रहा हूं। जाहिर है JNI और UnsatisfiedLinkError चलते ... मैंने देखा है कि समय के सबसे अधिक, लिंकर त्रुटि इस तरह दिखता है:जेएनआई - देशी विधि पर असंतुष्ट लिंक्स त्रुटि
java.lang.UnsatisfiedLinkError: no whatever.dll in java.library.path
लेकिन वह मेरी समस्या नहीं है; जावा मेरा डीएलएल पा सकता है।
java.lang.UnsatisfiedLinkError: NativeTest.nativemethod(lJava/lang/String;)Z
मैं की तरह this one, this one, this one, this one, और this one, लेकिन कोई भी StackOverflow पर समान सवालों की एक संख्या को देखकर की कोशिश की है: मैं एक त्रुटि है कि मुझे मैं अपने विधि गलत नामित लगता हो रही है इन तरीकों से काम किया है। मुझे उबंटू मंचों पर this thread भी मिला, जहां यह ठीक उसी समस्या की तरह दिखता है, लेकिन सवाल पूछने वाले ने यह नहीं कहा कि उन्होंने अपनी समस्या कैसे तय की है (जो वास्तव में बेकार है)। इस पर सभी Google खोजों ने मुझे java.library.path के समान त्रुटि दी है।
मेरा वास्तविक कोड यहां है।
NativeTest.java
class NativeTest
{
public static native boolean nativemethod (String arg);
public static void main (String[] args)
{
System.out.println(nativemethod(""));
System.out.println(nativemethod("012"));
}
static { System.loadLibrary("NativeTest"); }
}
NativeTest.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class NativeTest */
#ifndef _Included_NativeTest
#define _Included_NativeTest
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: NativeTest
* Method: nativemethod
* Signature: (Ljava/lang/String;)Z
*/
JNIEXPORT jboolean JNICALL Java_NativeTest_nativemethod
(JNIEnv *, jclass, jstring);
#ifdef __cplusplus
}
#endif
#endif
NativeTest.c
#include <jni.h>
#include <windows.h>
#include "NativeTest.h"
JNIEXPORT jboolean JNICALL Java_NativeTest_nativemethod
(JNIEnv* Jenv, jclass Jref, jstring Jarg)
{
MessageBox(NULL, "text", "title", MB_OK);
int len = (*Jenv)->GetStringLength(Jenv, Jarg);
return (jboolean)(len > 5);
}
सेमी में d.exe: (जीसीसी आदेश विभिन्न आदेशों मैं इंटरनेट पर मिल गया है की मेरी गोलमाल है।)
>javac NativeTest.java
>javah -jni NativeTest
>gcc -shared -I<jdk_dir>\include -I<jdk_dir>\include\win32 -oNativeTest.dll NativeTest.c -lgdi32
>java -Djava.library.path=. NativeTest
Exception on thread "main" java.lang.UnsatisfiedLinkError: NativeTest.nativemethod(Ljava/lang/String;)Z
at NativeTest.nativemethod(Native Method)
at NativeTest.main(NativeTest.java:8)
>java NativeTest
Exception on thread "main" java.lang.UnsatisfiedLinkError: NativeTest.nativemethod(Ljava/lang/String;)Z
at NativeTest.nativemethod(Native Method)
at NativeTest.main(NativeTest.java:8)
मैंने आपके कोड पर नजदीक नज़र डाली है, लेकिन क्या आपने इसके बजाय जेएनए का उपयोग करने पर विचार किया है? तब आपको जेएनआई की अप्रासंगिकता के बारे में चिंता करने की ज़रूरत नहीं होगी। – rob
जेएनए को भी नहीं पता था। मैं इस पर गौर करूंगा। धन्यवाद :) – nuju
आपके जावा कोड में आप जिस पैकेज का नाम उपयोग कर रहे हैं वह क्या है? – ioums