Tomcat中的本机库UnsatisfiedLinkError + Windows + eclipse

时间:2016-09-28 08:28:16

标签: eclipse windows tomcat java-native-interface unsatisfiedlinkerror

此问题可能早前曾在SO上提出过,请放心,我确实检查了所有可用的解决方案。仍然无法让它运行

我的问题完全如本文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正在被加载。

我注意到SO

有3种类型的UnsatisfiedLinkError

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

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我终于找到了解决方案。它对我有用。

首先,我安装了libLBFGS和crfsuite。你可以在这里找到指令(http://www.chokkan.org/software/crfsuite/manual.html)。 libcrfsuite.so将安装在/ usr / local / lib

其次,我编辑tomcat配置以加载本机库。我在tomcat bin文件夹中创建setenv.sh,使用content:

设置CATALINA_OPTS变量

export CATALINA_OPTS =“ - Djava.library.path = / usr / local / bin:/ usr / local / lib”

最后,我使用自定义ServletContextListener并通过System.load()显式加载libcrfsuite.so。我去这个链接下载lib(https://github.com/vinhkhuc/jcrfsuite/tree/master/src/main/resources/crfsuite-0.12

答案 1 :(得分:0)

我有类似的问题,但没有Tomcat。 我最终从他们的一个类复制逻辑,只是调用:

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