Java在jar包中載入so包dll包dylib等

2021-09-10 01:38:48 字數 1206 閱讀 1339

使用ide為idea,/lib/libxyz.so位於resource下,通過動態設定jar路徑,然後載入。

system.

loadlibrary

("xyz"

);

如果直接啟動idea系統正常載入。但將項打包為jar,啟動jar包執行確出現找不到jar載入異常,產生unsatisfied linked error異常。

通過idea啟動專案,***.class.getresource("/lib/libxyz.so").getpath()獲取的路徑如下

/users/***/target/classes/lib/libxyz.so
而loadlibrary最終是通過native方法來載入的。

當將專案打成jar包,然後執行***.class.getresource("/lib/libxyz.so").getpath()輸出路徑如下

/users/***/target/yyy-

1.0-snapshot.jar!

/boot-inf/classes!

/lib/libxyz.so

最終native方法在檔案系統中無法找到最後的jar包裡的so包。

由於ctripdecoder.class.getresourceasstream(sourcepath);方法可以獲取inputstream輸入流,因此將so包中的檔案拷貝到指定的目錄下[1],然後通過native可訪問的路徑去載入即可。下面的**將檔案拷貝到系統當前目錄下,然後返回路徑。

public

static string loadlib

(string filename,string sourcepath)

throws ioexception

fos.

close()

; in.

close()

; string abpath = temp.

getabsolutepath()

;return abpath.

substring(0

,abpath.

lastindexof

("/"))

;}

[1]load library from jar,

在Ogre中載入自己的資源包

由於資料保護的需要,一款遊戲一般都會有自己獨有的資源包,這樣做既有利於智財權的保護,又減少了磁碟碎片的產生。ogre本身是支援的zip包的,但zip包不具要資源保護的特性,隨便用個winrar就可以把資源開啟並匯出,這樣就失去了資料保護的意義。現在假設你的操作資源包的api已經完成,下一步需要整合到...

java程式中動態載入jar包並執行

載入jar包的類urlclassloader中使用的方法為addurl,但是這個方法是protected型別 分別用了兩種方法 一 參考 反射到這個類 method add urlclassloader.class.getdeclaredmethod addurl new class add.set...

Java手工打Jar包

用法 jar vfm0mi jar 檔案 manifest 檔案 c 目錄 檔名 選項 c 建立新的存檔 t 列出存檔內容的列表 x 展開存檔中的命名的 或所有的 檔案 u 更新已存在的存檔 v 生成詳細輸出到標準輸出上 f 指定存檔檔名 m 包含來自標明檔案的標明資訊 0 只儲存方式 未用zip壓...