2015-08-18 3 views
0

Можно ли загрузить библиотеку Teamspeak.so по System.loadLibrary в java и получить доступ к методам, объявленным в файлах .h? (источники являются файлы из ts3_sdk_3.0.3.2 - .h файлы из /include/teamspeak/serverlib.h; .so файлы из /bin/libts3server_linux_amd64.so)Загрузить динамическую связанную библиотеку Teamspeak с JNI в Java

Im возможности загрузить библиотеку:

System.loadLibrary("ts3server_linux_amd64"); - работает без ошибок.

Когда я пытаюсь использовать метод я получаю

java.lang.UnsatisfiedLinkError

Testcode:

public class main { 

    static { 
     System.loadLibrary("ts3server_linux_amd64"); 

    } 

    public static void main(String[] args) { 

     new main().onClientStartTalkingEvent(); 

    } 

    private native void onClientStartTalkingEvent(); 
} 

(.so файл хранится в папке Lib и добавлен в путь к классам. OS - ubuntu).

Спасибо и наилучшие пожелания

+0

Какова ваша реализация onClientStartTalkingEvent? –

+0

реализация выглядит следующим образом: #ifndef SERVERLIB_H #define SERVERLIB_H #include #include #ifdef __cplusplus ехЬегп "C" { # endif struct ServerLibFunctions { \t void (* onClientStartTalkingEvent) (uint64 serverID, anyID clientID); \t void (* onClientStopTalkingEvent) (uint64 serverID, anyID clientID); (начало файла serverlib.h. Я уверен, что он хранится в .so-библиотеке) – BenniR6

+0

Мне нужно использовать что-то вроде указателя на методы в файле .h библиотеки .so? Я думал, что реализация «native void» является указателем? – BenniR6

ответ

1

вместо загрузки Teamspeak .so вы должны загрузить .so вашего кода JNI (который связывает против TeamSpeak .so).

Редактировать

Чтобы вызвать встроенную библиотеку из Java вам нужно написать JNI обертку. Это сама собственная библиотека, которую вы должны загрузить с Java и может быть вызвана через функции native. Если родной библиотекой, которую вы хотите вызвать, является C (а не C++), вы можете посмотреть проекты, такие как jnr-ffi или jna. Это позволяет вам вызывать библиотеки C без необходимости писать обертку JNI.

+0

Так тяжело писать что-то вроде обертки .so – BenniR6

+0

Спасибо! Я дам ему попробовать. – BenniR6