这个问题比较急,借用首页发一下,谢谢!
最近需要对一个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使用了,希望有经验的朋友可以解答我的疑问。