在 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 包装器。
是否可以通过 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 包装器。