最近需要对一个C++库进行封装,为简单起见决定使用JAVA对其封装。但是一直调用不成功,于是写了一段测试代码测试一下。为简单起见,就使用默认包了。public class TestDLL {
    public native String Test(String put);
    
    static{
        System.loadLibrary("testdll");
    }
    
    public static void main(String[] args) {    
        TestDLL test = new TestDLL();
        System.out.println(test.Test(new Date().toString()));
    }
}然后生成了C++头文件/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class TestDLL */#ifndef _Included_TestDLL
#define _Included_TestDLL
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     TestDLL
 * Method:    Test
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_TestDLL_Test
  (JNIEnv *, jobject, jstring);#ifdef __cplusplus
}
#endif
#endif下面是简单的实现
#include "TestDLL.h"JNIEXPORT jstring JNICALL Java_TestDLL_Test
  (JNIEnv *, jobject, jstring put){
      return put;
}在linux下通过gcc编译后,java调用:
java -Djava.library.path=/home/xp -cp . TestDLL一直报错:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no testdll in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734)
        at java.lang.Runtime.loadLibrary0(Runtime.java:823)
        at java.lang.System.loadLibrary(System.java:1028)
        at TestDLL.main(TestDLL.java:27)但是我在windows下编译了testdll.dll后,能够调用正常。接着我改写为System.load("/home/xp/testdll.so");结果可以在linux使用了,希望有经验的朋友可以解答我的疑问。

解决方案 »

  1.   

    补充下,我用的CentOS ,jdk1.6.0_18
      

  2.   

    还没使用过JNI  郁闷弱弱地问问lz,jni是拿来干嘛的?
      

  3.   

    不会搞,但是收藏了几个好点的贴子希望能够帮上你http://blog.csdn.net/skywalker256/archive/2009/10/15/4677644.aspx
      

  4.   

    Exception in thread "main" java.lang.UnsatisfiedLinkError: no testdll in java.library.path
    这个错误意味着testdll无法被载入,可以通过以下三种方法解决:
    1.  将testdll.dll放在当前目录下
    2. 将testdll.dll防止在path环境变量所指向的路径下
    3. 启动jvm时,指定选项"-Djava.library.path",将testdll.dll放在该选项所指向的路径下
      

  5.   

    把testdllf放到system32或者jkd/bin下试试