2012-06-28 61 views
0

我正在尝试加载库时收到异常:UnsatisfiedLinkError。我已将库文件放在正确的路径中,并将路径添加到PATH env变量中。但似乎没有任何工作。直到我更改了Tomcat配置,并将-Djava.library.path = C:\ Windows \ System32添加到java选项。我的一位同事不需要这样做,但在她的系统上工作得很好,我错过了什么?任何人都可以对此表示赞赏吗?UnsatisfiedLinkerror

+0

可能重复:HTTP:// stacko verflow.com/questions/1694161/java-problem-unsatisfiedlinkerror –

+0

参考http://stackoverflow.com/questions/957700/how-to-set-the-java-library-path-from-eclipse这将帮助你.. –

回答

0

一种选择是注册

Regsvr32 “path to your dll.dll”. 

这将安装/注册DLL(我假设它是一个DLL)

但我通常观察到的DLL,如果是COM DLL那么你必须注册它并把它放到System32中

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” 生成头文件 “Ph” 是

步骤4.创建文件“物理防御”,包括以下两行(此文件定义了导出的符号,在这种情况下C函数的名称):

EXPORTS 
Java_P_f 

步骤5.创建C文件(PC):

#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

的路径210

集包括=%包括%;%JAVA_HOME%\包括;%JAVA_HOME%\包括\ WIN32

步骤7.生成DLL:

CL/LD PC物理防御

步骤8 。运行Java程序:

java的P

(注:P.dll和P.class位于同一目录)