我已经成功地从一个使用 JNI 的 Java 程序调用了一个包含在 dll 中的方法。这就是我所做的:
public class MyClass {
static {
System.load("C:/Users/pabloruiz/library.dll");
System.loadLibrary("library"); // This works too if the dll is in the Java Build Path
}
public native void foo();
public static void main(String[] args) {
new MyClass().foo(); // invoke the native method
}
}
现在我正在尝试做同样的事情,但在一个带有 Tomcat 的网络应用程序中。我尝试过使用绝对路径和相对路径,将 dll 放在 WEB-INF/lib 中,在 Properties->Java Build Path 中选择它,但它不起作用。顺便说一句,我正在研究 Eclipse。
这是我得到的错误:
java.lang.UnsatisfiedLinkError: com.example.MyClass.foo()
编辑:
显然,它找到了 dll,因为如果我将名称更改为不存在的名称,我会收到一条错误消息,告诉我找不到 dll。据我了解,它在 dll 中找不到方法 foo(),这很奇怪,因为正如我上面所说,同一个 dll 可以从一个简单的 java 程序(不是网络应用程序)中工作。