2016-07-07 76 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加载器,否则操作系统不会让您从内存中加载共享库。