2016-09-28 38 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); 
    } 
}