2016-07-07 39 views
0

我嘗試在一個java庫(例如project A)中包含一個本地庫(一個linux共享庫myLib.so),該庫使用maven打包到jar中。我將本地庫作爲資源添加到jar(在jar中的頂層)。加載罐子附帶的JNA庫

現在我嘗試在另一個項目中使用這個庫(project B)。當我通過Java庫調用對象的方法時,它找不到該庫。

在項目BI呼叫類似

org.projectA.MyObject.initLib(); 

MyObjectproject A需要訪問libarary:

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

所以,我可以出貨的共享庫與我的罐子或做我需要使用解決方法如獲取資源作爲流並將其首先寫入文件系統?

+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加載器,否則操作系統不會讓您從內存中加載共享庫。