【发布时间】:2016-09-28 08:28:15
【问题描述】:
这个问题之前可能已经在 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 应用程序运行时运行良好。
已经浪费了很多时间,任何帮助都是可观的。
谢谢 查哈特
【问题讨论】:
-
B(Byte) 和V(Void) 属于swing_module_init()V方法的签名并且只告诉返回类型是Void(或Byte在其他情况下),请参阅:docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/… -
感谢 nyyrikki 的回答,您能告诉我如何解决吗?使本机函数调用在 Web 应用程序(tomcat)中工作??谢谢
-
在 Tomcat 中不运行时它对你有用吗(不仅加载,而且调用原生方法)?如果我从上面正确理解了您的描述,那么您更多的是指 stackoverflow 上的链接问题。如果您向我们展示使用 javah 生成的头文件,也会有所帮助。
-
是的,当我将它作为标准 Java 应用程序运行但不能与 Tomcat 一起运行时,它可以工作。我在我的应用程序中使用了第 3 方代码。它可以在 GitHub 上找到 github.com/vinhkhuc/jcrfsuite 他正在使用 SWIG(我不熟悉 SWIG,我只是按原样使用他的代码,它可以在独立应用程序中运行)这是头文件 github.com/vinhkhuc/jcrfsuite/blob/master/src/main/java/… 这就是tomcat 应用程序失败 /third_party/org/chokkan/crfsuite/crfsuiteJNI.java(行号 85)
标签: eclipse windows tomcat java-native-interface unsatisfiedlinkerror