在 Java 中使用 JNI 加载 Teamspeak 动态链接库

Load Teamspeak dynamic linked library with JNI in Java

是否可以通过 java 中的 System.loadLibrary 加载 Teamspeak.so 库并访问 .h 文件中声明的方法? (来源是来自 ts3_sdk_3.0.3.2 的文件 - 来自 /include/teamspeak/serverlib.h 的 .h 文件;来自 /bin/libts3server_linux_amd64.so 的 .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)。

谢谢和最诚挚的问候

无需加载 teamspeak .so,您需要加载 JNI 代码的 .so(它链接到 teamspeak .so)。

编辑

要从 Java 调用本机库,您需要编写 JNI wrapper. This is a native library itself which you have to load from Java and can be called through native functions. If the native library you want to call is C (and not C++) you can have a look at projects like jnr-ffi or jna。这些允许您调用 C 库而无需编写 JNI 包装器。