使用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壓...