2016-09-28 73 views
1

這個問題可能早就在SO上提出過了,請放心,我確實檢查了所有可用的解決方案。仍然無法得到它的運行Tomcat中的本地庫UnsatisfiedLinkError + Windows + eclipse

我的問題是完全一樣在這個崗位Shared native library in Tomcat UnsatisfiedLinkError

獨立的Java應用程序運行得很好描述。然而在Tomcat(9),它無法運行並拋出

java.lang.UnsatisfiedLinkError: third_party.org.chokkan.crfsuite.crfsuiteJNI.swig_module_init()V 
    at third_party.org.chokkan.crfsuite.crfsuiteJNI.swig_module_init(Native Method) 
    at third_party.org.chokkan.crfsuite.crfsuiteJNI.<clinit>(crfsuiteJNI.java:87) 
    at third_party.org.chokkan.crfsuite.Tagger.<init>(Tagger.java:39) 

我知道,我的DLL被加載後,還我檢查了我的DLL是在文件夾中,是在PATH變量。我也檢查了正在加載的類,並且事實上正在加載DLL。

我注意到3種類型的UnsatisfiedLinkError在SO

1)java.lang.UnsatisfiedLinkError中:third_party.org.chokkan.crfsuite.crfsuiteJNI.swig_module_init()V 2)java.lang.UnsatisfiedLinkError中: third_party.org.chokkan.crfsuite.crfsuiteJNI.swig_module_init()B 3)類加載器加載兩次。

我相信V,最後確實表示一些東西。但我無法弄清楚究竟是什麼?

我在上面分享的SO帖子中接受的答案之一聲稱它與版本有關。我不明白這是一個可接受的解決方案,因爲它作爲一個獨立的Java應用程序運行時效果很好。

浪費了很多時間,任何幫助都是可觀的。

感謝 Chahat

+0

'B'(字節)和'V'(無效)屬於'swing_module_init()V'方法的簽名(S ),並且只告訴返回類型是'Void'(或者在另一種情況下是'Byte'),請參閱:http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/ types.html – nyyrikki

+0

感謝nyyrikki的答案, 請問如何解決它?使本地函數在Web應用程序(tomcat)中調用工作? 謝謝 – user4772933

+0

在Tomcat中運行時(不僅僅是加載,而是調用本地方法),它是否適用於您?如果我從上面正確理解了你的描述,那麼你更關心的是stackoverflow上的鏈接問題。如果你向我們展示用javah生成的頭文件,它也會有所幫助。 – nyyrikki

回答

0

我面臨着同樣的問題。我終於找到解決方案。這個對我有用。

首先,我安裝了libLBFGS和crfsuite。你可以在這裏找到說明(http://www.chokkan.org/software/crfsuite/manual.html)。 libcrfsuite.so將被安裝在/ usr/local/lib中

其次,我編輯tomcat配置爲了加載本地庫。我創建tomcat的bin文件夾setenv.sh,設置CATALINA_OPTS變量的內容:

出口CATALINA_OPTS = 「 - Djava.library.path =在/ usr/local/bin目錄:在/ usr/local/lib目錄」

最後,我使用了自定義ServletContextListener,並通過System.load()顯式加載libcrfsuite.so。我去這個鏈接下載庫(https://github.com/vinhkhuc/jcrfsuite/tree/master/src/main/resources/crfsuite-0.12

0

我有一個類似的問題,但沒有與Tomcat。 我結束了從它們的類中的一個複製邏輯和簡單地調用:

static { 
    try { 
     CrfSuiteLoader.load(); 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 
}