Java DLL链接错误

Someguynamedpie:

我正在使用libusb- http://sourceforge.net/apps/trac/libusb-win32/wiki

但是,我得到:

线程“主”中的异常java.lang.UnsatisfiedLinkError:USBManager.usb_init()V

public class USBManager 
{   
    static{
        System.loadLibrary("libusb");   
    }

    native void usb_init();
    public USBManager()
    {       
        usb_init();     
    } 
}
Petesh:

您不能只使用公共本机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();
}

Sun开发人员博客中提供了一个非常简单的很好的示例,但是还有许多其他示例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章