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