JNIを使用しようとして、java.lang.UnsatisfiedLinkErrorを取得しています。これについて尋ねられた他の百万の質問とは異なり、私は自分の道にlibを持っており、それを削除すると例外の変化さえ見ました。作成したdllに問題があることは確かですが、何が原因かわかりません。
これが私のJavaクラスコードです:
package com;
public class Tune {
static {
System.loadLibrary("lala");
}
public static void main(String[] args) {
Tune j = new Tune();
System.out.println("2+6="+j.add(2, 6));
}
native public int add(int x,int y);
}
これが私のjavahで生成されたヘッダーファイルの要約部分です:
/*
* Class: com_Tune
* Method: add
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_com_Tune_add
(JNIEnv *, jobject, jint, jint);
これが私のc++コードです:
#include <jni.h>
#include <com_Tune.h>
JNIEXPORT jint JNICALL Java_com_Tune_add
(JNIEnv * env, jobject obj, jint x, jint y) {
return x+y;
}
Eclipseから取得するランタイム例外は次のとおりです。
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.Tune.add(II)I
at com.Tune.add(Native Method)
at com.Tune.main(Tune.java:9)
上記の例外は、ライブラリ「lala」がDIDで検出されたことを意味しますが、メソッド「add」はまだ定義されていないことを読みました。プロジェクトとチュートリアルで異なるのは次のとおりです。
- 私はデフォルトのパッケージの代わりにパッケージを使用しています(チュートリアルは実際にこれを行うべきではありませんか?!?!さあ、プロになりましょう)
- 鉱山には戻り値があります。
- 作成後にdllを移動しました(パスが構成されているため、これによってdllが破損することはないと思います)。
これはどのように可能ですか?
他の情報:
OS:Windows 7
JDK:1.6.0_31(x86、32ビットjvmの場合)
C ++ IDE:Code :: Blocks(dllはCode :: Blocks IDEによって自動的にコンパイルされました)
C ++コンパイラ:MinGW32-g ++(GNU C ++コンパイラ)
C:\ _ \ include
にjni.hとcom_Tune.hがあります。C:\ _\libにlala.dllがあります。
環境変数:
パス:C:\ Program Files(x86)\ NVIDIA Corporation \ PhysX \ Common;%CommonProgramFiles%\ Microsoft Shared \ Windows Live; C:\ Program Files(x86)\ AMD APP \ bin \ x86_64; C:\プログラムファイル(x86)\ AMD APP \ bin \ x86;%SystemRoot%\ system32;%SystemRoot%;%SystemRoot%\ System32 \ Wbem;%SYSTEMROOT%\ System32 \ WindowsPowerShell \ v1.0 \; C:\ Program Files( x86)\ ATI Technologies \ ATI.ACE \ Core-Static; C:\ Apps;%JAVA_HOME%\ bin; C:\ Program Files \ MySQL \ MySQL Server 5.5 \ bin;%MAVEN_HOME%\ bin;%HADOOP_INSTALL%\ bin ; c:\ Program Files(x86)\ Microsoft SQL Server \ 100 \ Tools \ Binn \; c:\ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \; c:\ Program Files \ Microsoft SQL Server \ 100 \ DTS \ Binn \; C:\ MinGW \ bin; C:\ Program Files(x86)\ GnuWin32 \ bin; C:_ \ path; C:\ _ \ lib; C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin; C:\ _ \ include