私はWindows XPを使用しています。どうやらJNIとないUnsatisfiedLinkErrorが手をつないで行く...私はほとんどの時間は、リンカエラーがこのようになっていることに気付きました:JNI - ネイティブメソッドのUnsatisfiedLinkError
java.lang.UnsatisfiedLinkError: no whatever.dll in java.library.path
しかし、それは私の問題ではありません。 Javaは私のDLLを見つけることができます。私はthis one、this one、this one、this one、そしてthis oneが、いずれも同様のStackOverflow上の類似した質問の数を見てみました
java.lang.UnsatisfiedLinkError: NativeTest.nativemethod(lJava/lang/String;)Z
:私は私が私が私の方法を間違っているという名前と思わせるエラーを取得していますこれらの方法のうちの1つが機能した。私はまた、Ubuntuのフォーラムでthis threadを見つけましたが、私はこれとまったく同じ問題を抱えていますが、質問者は自分の問題をどのように修正したのかは言いませんでした。これに関するすべてのGoogleの検索で、java.library.pathと同じエラーが表示されます。
これは私の実際のコードです。単位cm
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は: (gccのコマンドは、私はインターネット上で見つけた様々なコマンドの私の寄せ集めである。)
>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)
私はあなたのコードをよく見ていませんが、代わりにJNAを使用することを検討しましたか?それでは、JNIの不親切さを心配する必要はありません。 – rob
JNAが存在するかどうかは知りませんでした。私はそれを調べます。ありがとう:) – nuju
あなたのJavaコードで使用しているパッケージ名は何ですか? – ioums