繁体   English   中英

从罐子中加载.so文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM