一个JNI的问题请教

yurow 2010-04-28 06:20:00
最近需要对一个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使用了,希望有经验的朋友可以解答我的疑问。
...全文
138 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
charles361 2010-05-08
  • 打赏
  • 举报
回复
dll的问题吧
ZHXDD 2010-05-08
  • 打赏
  • 举报
回复
请将dll放到classpath下
Lynn_20043745 2010-04-28
  • 打赏
  • 举报
回复
把testdllf放到system32或者jkd/bin下试试
zfq642773391 2010-04-28
  • 打赏
  • 举报
回复
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放在该选项所指向的路径下
yueguangkai001 2010-04-28
  • 打赏
  • 举报
回复
不会搞,但是收藏了几个好点的贴子希望能够帮上你http://blog.csdn.net/skywalker256/archive/2009/10/15/4677644.aspx
欢乐极客 2010-04-28
  • 打赏
  • 举报
回复
还没使用过JNI 郁闷

弱弱地问问lz,jni是拿来干嘛的?
yurow 2010-04-28
  • 打赏
  • 举报
回复
补充下,我用的CentOS ,jdk1.6.0_18

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧