項目中使用了哈工大的天然語言處理模塊ltp4j,使用idea工具集成到項目中以後,在本機運行沒有問題,一切正常。打成war包,部署到服務器上,使用的時候報錯Can't find dependent libraries,比較明顯就是缺乏依賴庫。java
1 程序缺乏依賴庫的問題分析服務器
和引入其餘不少的C++程序同樣,咱們常常碰到這個問題。程序在有的機器上能運行,在有的機器上不能運行,是否運行徹底靠運氣。這是由於C++的dll文件,它會依賴不少的C++庫,這些C++庫在不一樣的操做系統中安裝的不太同樣,有的安裝少,有的安裝多一些。這個問題在咱們安裝遊戲軟件的時候也會碰到,若是缺乏一些C++的庫文件,遊戲也不能安裝成功。ide
既然缺乏C++的庫文件,咱們的思路就是把C++的庫文件安裝上,通常能夠找C++的補丁庫,直接在系統中安裝,這種庫文件的集合通常都比較大,至少幾百兆,或者1個G,甚至於幾個G,安裝完成後,若是安裝的比較全,通常問題就能解決了。但這種方法,有個缺點就是文件太大,安裝的東西太多,很耗費資源,若是機器的配置不夠高的話,安裝這些程序可能直接將機器整的崩潰。並且這個方法也有碰運氣的成分,咱們有的時候很難保證咱們找的庫文件是全的。工具
另一個思路就是,既然缺乏庫文件,那咱們就肯定到底少哪些庫文件,只在系統中補充那些缺乏的庫文件,這樣既能解決問題,也能避免安裝大量使用不到的庫文件。測試
2 查找缺乏的依賴庫後補充到系統網站
因爲Can't find dependent libraries的報錯,並無告訴咱們缺乏的具體庫文件是哪個,咱們只有藉助於一些工具來查找缺乏的庫文件。Dependency walker是一個很好的定位缺失的dll文件的工具,在http://www.dependencywalker.com/中,咱們能夠下載對應系統的軟件版本,解壓後,直接運行裏面的exe文件,在軟件中打開咱們的ltp4j-0.1.0-SNAPSHORT.dll,軟件就會自動查找dll的依賴庫,並對沒有找到的依賴庫標紅。idea
標紅的dll文件,就是系統缺乏的庫文件,記錄下庫文件的名稱,而後根據名稱到www.zhaodll.com網站去查找缺乏的庫文件,找到以後下載到本地,而後拷貝到C:\Windows\System32文件夾中。因爲缺乏的依賴庫可能不止一個,咱們還須要再次利用dependency walker軟件打開,查找缺乏的庫文件,到zhaodll網站下載,copy到C:\Windows\System32目錄中,重複操做,一直到沒有紅色標出的缺乏dll文件爲止。操作系統
這時候,就表示咱們補全了ltp4j-0.1.0-SNAPSHORT.dll的依賴庫,應該可以正常運行了,這時候咱們在進行運行測試。問題就解決了。blog
3 結語遊戲
該問題具備廣泛性,針對全部的C++程序缺乏依賴庫的問題都有效。另外,使用ltp4j-0.1.0-SNAPSHORT.dll的時候,在缺乏依賴庫的時候,還可能報其餘錯誤信息,java.lang.NoClassDefFoundError,也就是程序在編譯的時候沒有問題,可是,運行的時候,因爲缺乏依賴庫,因此會報錯類沒有定義。這個問題,若是沒有前面缺乏依賴庫的信息提示,只看java.lang.NoClassDefFoundError可能很難找到問題所在。