Вы не можете использовать общедоступный пользовательский 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
Выиграть? вы имеете в виду Windows? Ах, извините, не поддерживая устаревшие системы :) –