1

これは私のJavaコードです。

class NativePrompt {
    private native String getInput(String prompt);  //native method
    static   //static initializer code
    {
        System.loadLibrary("NativePrompt");
    } 

    public static void main(String[] args)
    {
        NativePrompt NP = new NativePrompt();
        String sName = NP.getInput("Enter your name: ");
        System.out.println("Hello " + sName);
    }
}

私はjdk1.7.0_17を使用しています。これは私のc++コードです

#include "NativePrompt.h" 
#include "jni.h"
#include "string"
#include "iostream"
#include "vector"

using namespace std;
/*
 * Class:     NativePrompt
 * Method:    getInput
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_NativePrompt_getInput
    (JNIEnv *env, jobject obj, jstring prompt){

    string sEntry;
    const char *str;
    str = env->GetStringUTFChars(prompt, NULL);
    if (str == NULL) {
        return env->NewStringUTF("");
    }
    else{
    cout << str;
        //Frees native string resources
        env->ReleaseStringUTFChars(prompt, str);

        //reads n-consecutive words from the 
        //keyboard and store them in string
        getline(cin, sEntry);

        return env->NewStringUTF(sEntry.c_str());
    }
}

以下のコメントを使用してこのプログラムを実行します。

javac NativePrompt.java

javah NativePrompt

g ++ -o NativePrompt.so -shared -I /usr/lib/jvm/jdk1.7.0_17/include -I /usr/lib/jvm/jdk1.7.0_17/include/linux NativePrompt.cpp

エクスポートLD_LIBRARY_PATH='/home / user / jniwork /'

java NativePrompt

現在、以下のエラーが発生しています。解決方法がわかりません。

スレッド"main"の例外java.lang.UnsatisfiedLinkError:java.lang.Runtime.loadLibrary0(Runtime.java:845)のjava.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)のjava.library.pathにNativePromptがありませんjava.lang.System.loadLibrary(System.java:1084)でNativePrompt。(NativePrompt.java:5)で

4

1 に答える 1

1

次のようにアプリケーションを起動してみてください。

java -Djava.library.path=/home/user/jniwork/ NativePrompt

また、その前に、ライブラリの名前を NativePrompt.so からlibNativePrompt.soに変更します

これがお役に立てば幸いです。

于 2013-03-21T06:40:45.510 に答える