2016-11-09 24 views
2

私は母国語でいくつかの関数を呼び出すJavaでプログラムを作った。C言語の関数ファイルの共有ライブラリを作り、共有ライブラリを作って、すべてがうまくいった。Jniと共有ライブラリ

私の問題は、たとえばPBC(Pairing Based Cryptography)ライブラリで他の関数を呼び出そうとするときです。共有ライブラリにあるCファイルには、PBCの機能を知るために必要な.hファイルが含まれていますが、使用できません。理由はわかりません。私は何をすべきか?別のライブラリにある関数をどのように呼び出すことができますか?

ライブラリをロードするためのJavaコード。

static { 

    System.loadLibrary("myLibrary"); 
    System.loadLibrary("pbc"); 
} 

エラー私自身のJavaプログラムを実行する:

​​
+0

何か(静的にまたは動的に)PBCライブラリをリンクしていますか? – LPs

+0

Cプログラムでは、私はそれらだけを含んでいます、私は別のものを作らなければなりませんか? – Tortxu13

+0

それは依存します:libをあなたの共有ライブラリに静的にリンクすることもできますし、共有PBCライブラリを最終アプリケーションのリンクコマンドに追加することもできます。 – LPs

答えて

1

を使用したい共有ライブラリを使用してJNIコードをリンクすることを確認します。

あなたはここでのサンプルコードを見てみることができます。このサンプルで

https://github.com/mkowsiak/jnicookbook/tree/master/recipeNo023

をあなたはJNI機能があります。

JNIEXPORT void JNICALL Java_recipeNo023_HelloWorld_displayMessage 
    (JNIEnv *env, jclass obj) { 

    printf("Hello world!\n"); 
    /* We are calling function from another source */ 

    anotherFunction(); 
} 

いくつかの外部の共有ライブラリ

void anotherFunction() { 
    // we are printing message from another C file 
    printf("Hello from another function!\n"); 
} 
から関数を呼び出します

あなたのJNIライブラリi使用するライブラリとリンク(S)このサンプルで

cc -g -shared -fpic -I${JAVA_HOME}/include -I${JAVA_HOME}/include/$(ARCH) c/recipeNo023_HelloWorld.c -L./lib -lAnotherFunction -o lib/libHelloWorld.$(EXT) 

-L./lib -lAnotherFunction 

は、JNIコードを含むライブラリ内の利用可能なシンボルがない含まれているこの「その他」のライブラリを使用するようにコンパイラに指示します。

関連する問題