java中呼叫本地動態連結庫(*.DLL)的兩種方式詳解和not found library、打包成jar,war包dll無法載入等等問題解決辦法
我們經常會遇到需要java呼叫c++的案例,這裡就java呼叫DLL本地動態連結庫兩種方式,和載入過程中遇到的問題進行詳細介紹
1、通過System.loadLibrary("dll名稱,不需要字尾名")
例如:
System.loadLibrary("StreamParser");
System.loadLibrary("StreamPackage");
System.loadLibrary("StreamConvertor");
那麼這樣寫了之後你執行時就會發現,還是調用不了,因為這種載入dll的方式會自動到jre的lib資料夾下搜尋這些本地動態連結庫,那麼沒找到就肯定會報錯,not found library!
這裡用eclipse舉個例子:
eclipse要這樣設定:右鍵專案-->選擇proerties選項-->找到java build path -->選中右邊框中的Source選項卡,展開-->選中 native library location ,點選右邊的edit按鈕,就可以設定本地dll的路徑了,這裡我的dll放在專案中的lib資料夾下就可以點選workspace設定載入專案路徑下的dll。如下圖:
2、通過System.load("這裡填寫dll檔案的完整路徑")載入檔案路徑方式載入本地連結庫
上一種載入dll的方式,你會發現不管是打成jar包還是war包都是不行的,那麼怎麼辦呢,這時候第二種方式幫你解決這個問題,按照檔案路徑載入dll。
比如我是這樣做的,我先將所有要載入的dll檔案路徑寫在loadConf.proeprties檔案中,在載入時讀取這個 配置檔案中的dll路徑並且通過System.load(“檔案路徑”)載入本地動態連結庫。
System.load(fileName);
總結:
第二種方式載入不論最終打包成jar包還是war包,只要在loadConf.proeprties中寫好dll的路徑就可以正確載入呼叫本地連結庫,而不再會出現第一種出現的問題。