我在尝试加载库时遇到异常:UnsatisfiedLinkError。我已将库文件放在正确的路径中,并添加了PATH env变量的路径。但似乎没有任何效果。直到我更改了Tomcat配置并将-Djava.library.path = C:\ Windows \ System32添加到java选项中。我的一位同事不必这样做,但它在她的系统上工作正常,我错过了什么?有人可以对这个请求有所启发吗?
答案 0 :(得分:0)
一个选项可能是注册dll
Regsvr32 “path to your dll.dll”.
这将安装/注册dll(我假设它是一个dll)
但是我一般都注意到如果它是COM dll那么你必须注册它并把它放在System32中
答案 1 :(得分:0)
在JNI中,Java本机方法的名称和相应C函数的名称不相同。为了调用C函数,C函数的名称必须包括前缀“Java_”,类名和方法名。简单的方法是使用程序“javah”来生成包含所有定义的头文件。
尝试使用以下Windows示例: (请记住,Java类名必须与相应的文件名相同)
步骤1.创建以下Java文件(P.java):
class P
{
static
{
// "P" is the name of DLL without ".dll"
System.loadLibrary ("P");
}
public static native void f(int i);
public static void main(String[] args)
{
f(1);
}
}
步骤2. javac P.java
步骤3. javah P
然后,“javah”生成头文件“P.h”
步骤4.创建文件“P.def”,包括以下两行(此文件定义导出的符号,在本例中为C函数的名称):
EXPORTS
Java_P_f
步骤5.创建C文件(P.c):
#include "p.h"
JNIEXPORT void JNICALL Java_P_f(JNIEnv *env, jclass c, jint i)
{
printf("%i\n",i);
}
步骤6.在Visual Studio命令promt中,定义以下变量:
设置JAVA_HOME = JDK的路径
set include =%include%;%JAVA_HOME%\ include;%JAVA_HOME%\ include \ win32
步骤7.生成DLL:
cl / LD P.c P.def
步骤8.运行Java程序:
java P
(注意:P.dll和P.class位于同一目录中)