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

时间:2015-08-18 07:45:43

标签: java teamspeak

是否可以在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中

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文件夹中并添加到类路径中。操作系统是ubuntu)。

谢谢和最好的问候

1 个答案:

答案 0 :(得分:1)

而不是加载teamspeak .so你需要加载你的JNI代码的.so(链接teampeak .so)。

修改

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