2016-07-07 6 views
0

mavenを使用してjarにパッケージ化されたJavaライブラリ(たとえばproject A)にネイティブライブラリ(Linux共有ライブラリmyLib.so)を含めるようにしました。私は、jarファイル(jarファイルのトップレベル)にリソースとしてネイティブライブラリを追加しました。jarと一緒に出荷されるJNAライブラリをロードする

今、別のプロジェクト(project B)でこのライブラリを使用しようとしています。 Javaライブラリからオブジェクトのメソッドを呼び出すと、ライブラリを見つけることができません。プロジェクトBIコールで

libararyにアクセスするためのproject Aニーズから

org.projectA.MyObject.initLib(); 

MyObjectのようなもの:

public static void initLib() { 
     MyLib lib = (myLib) Native.loadLibrary("myLib.so"),MyLib.class); 
} 

だから、私は私のjarファイルと共有ライブラリを出荷することができますか私が使用する必要がありますかリソースをストリームとして取得し、最初にファイルシステムに書き込むような回避策?

+0

JNAには、jarファイルから解凍してディスクに書き込むメソッドが用意されています。 ['Native.extractFromResourcePath()'](http://java-native-access.github.io/jna/4.2.1/com/sun/jna/Native.html#extractFromResourcePath-java.lang.String-)を参照してください。 。 – technomage

答えて

1

JARから抽出​​して、一時ディレクトリに書き込む必要があります。独自のPE/ELFローダーを作成しない限り、OSは共有ライブラリをメモリからロードすることはできません。

関連する問題