簡體   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