[英]Load .so file from a jar
我用C语言创建了一个库,并使用JNI从Java调用它,所以我有我的包和一个带有libMYLIB.so文件的lib文件夹。 我从Java写作中回想起:
static{
System.loadLibrary("MYLIB");
}
如果我使用-Djava.library.path = .. / lib选项执行它,则效果很好。
但是我需要使用我的package和lib文件夹创建一个jar文件。 所以我做到了,并导入了一个更复杂的项目。
在大型项目中,可以看到和使用我程序包的类,但是在运行时Java无法加载MYLIB。
是否可以告诉Java从jar文件加载它? 怎么样?
首先,我们需要确保JAR文件在类路径中。 然后,假设在JAR的/com/example/libMYLIB.so
下找到了库,这是一种加载库的简单方法:
InputStream is = ClassLoader.class.getResourceAsStream("/com/example/libMYLIB.so");
File file = File.createTempFile("lib", ".so");
OutputStream os = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) != -1) {
os.write(buffer, 0, length);
}
is.close();
os.close();
System.load(file.getAbsolutePath());
file.deleteOnExit();
但这掩盖了Loader类中JavaCPP涵盖的许多特殊情况和可移植性问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.