最近需要对一个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使用了,希望有经验的朋友可以解答我的疑问。
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使用了,希望有经验的朋友可以解答我的疑问。
解决方案 »
- 聊天程序的一个疑问?
- 求教DOM4J的xpath循环取值
- 如何自定义字符串排序规则?
- JTable中如何让一行的颜色变化
- 一个java难题,如何在java console application 下显示图片
- 奇怪,在网上找到的水晶报表9.2中文版,都没有report application server和Crystal Reports Advanced Developer Edittion两部分,而我正
- 如何获得本窗体的大小
- Java 实现资源管理器 JTree为什么主盘符(C D E)会出现两次, 还有显示也有点不爽 Why
- 如何快速取到某目录下所有文件中修改时间最接近当前时间的一个文件?....在线等待
- 不用上班也有钱花了,真是乐哉乐哉
- 一个关于插入排序的经典错误,请指教
- 计算器程序中的正负转换问题
这个错误意味着testdll无法被载入,可以通过以下三种方法解决:
1. 将testdll.dll放在当前目录下
2. 将testdll.dll防止在path环境变量所指向的路径下
3. 启动jvm时,指定选项"-Djava.library.path",将testdll.dll放在该选项所指向的路径下