2016-06-21 17 views
0

JavaクラスからC++メソッドにアクセスするためにJNIを使​​用しようとしています。私は細かい私のJavaクラス(エクリプスまたはコマンドラインで両方)コンパイルできるんだけど、実行時にクラスを実行するには、私が取得しています:以下のように実行時にjava.lang.UnsatisfiedLinkErrorを取得する

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.domain.services.CallServiceAPIS.createSession()I at com.domain.services.CallServiceAPIS.createSession(Native Method) at com.domain.services.CallServiceAPIS.main(CallServiceAPIS.java:18)

Javaコードは次のとおりです。

package com.domain.services; 

public class CallServiceAPIS { 

    static { 
     System.loadLibrary("service.client"); 
    } 

    public native int createSession(); 

    public static void main(String[] args) { 
     System.out.println(System.getProperty("java.library.path")); 
     new CallServiceAPIS().createSession(); 
    } 
} 

java.library.pathの出力を含めて、C++ライブラリの正しい場所を指していることを確認しました。私はまた、私のEclipse環境でLD_LIBRARY_PATHを設定しようとしました。しかし、どちらもうまくいった。

System.loadLibrary呼び出しは、1)コードがコンパイルされ、2)エラーが新しいCallServiceAPIs呼び出しである18行目で発生していることに注意してください。

C++コード:

int createSession(const PosServiceInfo info, const SessionArgs& args, Domain::UUID& uuidSession) 
    { 
     return int::undefined; 
    } 

任意のアイデア?

+0

createSessionが定義されているC++ソースコードを表示します。 – gudok

+0

@gudokはC++ソース – user3712321

+0

を返しました 'return int :: undefined;'これはC++ではありません。 – PaulMcKenzie

答えて

0

気にしないでください。私はJNIインターフェースを間違って使用していることに気付きました。私はあなたが既存のC++のソースを使って既存のC++ライブラリをロードできると思っていました。しかし、基本的にはJNIインターフェースを利用するために既存のコードを書き直さなければなりません。

+0

raw jniの代わりにjnaを使用するほうが簡単です(パフォーマンスペナルティを犠牲にして)。 – gudok

+0

@gudokありがとう、それを試みます。 – user3712321

関連する問題