0

是否可以在 java 中加载 Teamspeak.so 库System.loadLibrary并访问 .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 文件夹中并添加到类路径中。操作系统是 ubuntu)。

谢谢和最好的问候

4

1 回答 1

1

而不是加载teampeak .so,您需要加载JNI 代码的.so(链接到teampeak .so)。

编辑

要从 Java 调用本机库,您需要编写JNI包装器。这是一个本机库本身,您必须从 Java 加载它,并且可以通过native函数调用它。如果您要调用的本机库是 C(而不是 C++),您可以查看jnr-ffijna等项目。这些允许您调用 C 库而无需编写 JNI 包装器。

于 2015-08-18T14:07:01.623 回答