您不能只使用公共本机usb_init();然后像这样加载一个本地库,JNI没有这样实现。
您使用javah创建一个.h文件,可以使用该文件创建一个实现该类中特定本机函数的库。
javac USBManager
创建一个类文件,那你JAVAH使用:
javah USBManager
这就产生了一个文件,在该位置被称为“USBManager.h”,其中规定了功能于一身的.so实现/ .dll实现相关的本机功能。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class USBManager */
#ifndef _Included_USBManager
#define _Included_USBManager
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: USBManager
* Method: usb_init
* Signature:()V
*/
JNIEXPORT void JNICALL Java_USBManager_usb_1init
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
所以你需要导出一个名为“Java_USBManager_usb_1init”功能,即取到指定的参数。
该函数可以不外乎:
JNIEXPORT void JNICALL Java_USBManager_usb_1init (JNIEnv *, jobject) {
usb_init();
}
有上a blog by a Sun developer一个很好的简单的例子,但也有很多其他的例子在那里。
这是赢,而不是linux。在linux上,共享库名为“libabc.so”被“abc”引用,在win上,“libabc.dll”被“libabc”引用。 – Daniel 2011-01-30 09:02:19
赢?你的意思是Windows?啊,对不起,不支持遗留系统:) – 2011-01-30 16:43:43