0

java でTeamspeak.so ライブラリをロードSystem.loadLibraryし、.h ファイルで宣言されたメソッドにアクセスすることは可能ですか? (ソースは ts3_sdk_3.0.3.2 のファイル - .h ファイルは /include/teamspeak/serverlib.h から、.so ファイルは /bin/libts3server_linux_amd64.so から)

ライブラリをロードできます:

System.loadLibrary("ts3server_linux_amd64");- エラーなしで動作します。

メソッドを使用しようとすると、

java.lang.UnsatisfiedLinkError

テストコード:

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 です)。

よろしくお願いします

4

1 に答える 1

1

teampeak .so をロードする代わりに、JNI コードの .so をロードする必要があります (teamspeak .so にリンクします)。

編集

Java からネイティブ ライブラリを呼び出すには、 JNIラッパーを作成する必要があります。これは、Java からロードする必要があるネイティブ ライブラリ自体であり、native関数を介して呼び出すことができます。呼び出したいネイティブ ライブラリが C (C++ ではない) の場合は、jnr-ffijnaなどのプロジェクトを確認できます。これらを使用すると、JNI ラッパーを作成しなくても C ライブラリを呼び出すことができます。

于 2015-08-18T14:07:01.623 に答える