0

コマンドプロンプトを使用してjniでdllファイルを生成しました。「java helloWorld」コマンドで以下のコードを実行できます。しかし、日食からはできません。プログラムを実行すると、次のようなエラーが表示されます。

スレッド「メイン」の例外 java.lang.UnsatisfiedLinkError: java.lang.System の java.lang.Runtime.loadLibrary0(不明なソース) の java.lang.ClassLoader.loadLibrary(不明なソース) の java.library.path に native_library がありませんhelloWorld.(helloWorld.java:6) の .loadLibrary(不明なソース)

以下に示すように、native_library の絶対パスを使用しました。それの何が問題なのですか?

helloWorld.java:

public class helloWorld {

    static{     
        System.loadLibrary("native_library");
        System.load("C:/javaworkspace/helloWorld/src/native_library.dll");
        }   

    public static native void writeout(String ss);

    public static void main(String[] args) {    
        String sdf="Hello World";   
        writeout(sdf);              
    }
}

native_library.c:

#include <stdio.h>
#include "helloWorld.h"

JNIEXPORT void JNICALL Java_helloWorld_writeout
  (JNIEnv * env, jclass clazz, jstring str2)
  {
    const char *nativeString = (*env)->GetStringUTFChars(env, str2, 0);

    printf("%s \n",nativeString);

    (*env)->ReleaseStringUTFChars(env, str2, nativeString);
  }
4

2 に答える 2

2

私の意見では、DLL パスをハードコーディングすることは最善の方法ではありません。代わりにコマンド ライン引数を使用します。

java -Djava.library.path=<path_to_lib_directory>

Eclipse の場合: ビルド パスを開き (プロジェクトを右クリック > [ビルド パス] > [ビルド パスの構成...])、[ネイティブ ライブラリの場所] 属性を設定します。

于 2013-03-06T13:11:13.447 に答える
0

私は同じ問題を抱えていました。Ecplipseには独自のライブラリパスがあり、dllパスとは異なるためだと思います。追加してみてください

System.setProperty("java.library.path","your_dll_path");

すなわち

System.setProperty("java.library.path","/home/user/helloworldlib");

それは私のために働いた、これが役立つことを願っています!

于 2013-03-06T12:56:10.597 に答える