java调用so 库文件_java调用dll或so动态库文件(c++/c)
时间: 2023-12-13 21:03:14 浏览: 45
Java可以通过Java Native Interface(JNI)调用C或C++编写的动态链接库(也就是Windows下的.dll文件,Linux下的.so文件)。以下是一些简单的步骤:
1. 编写C或C++代码并将其编译为动态链接库文件(.dll或.so文件)。
2. 在Java中使用JNI接口声明与C或C++代码中的函数对应的Java本地方法,并将其实现为Java本地方法。
3. 编译Java代码并将其打包成jar文件。
4. 将生成的动态链接库文件放到Java程序能够访问到的目录下。
5. 运行Java程序。
以下是一个简单的示例:
1. 编写C代码
```c
#include <stdio.h>
#include "jni.h"
JNIEXPORT void JNICALL Java_com_example_Test_print(JNIEnv *env, jobject obj, jstring str) {
const char *c_str = (*env)->GetStringUTFChars(env, str, NULL);
printf("%s\n", c_str);
(*env)->ReleaseStringUTFChars(env, str, c_str);
}
```
函数名必须以Java_开头,并加上Java类的完整路径和方法名。
2. 编译动态链接库文件
假设我们已经将上述代码保存为test.c文件,可以使用以下命令将其编译为动态链接库文件:
- Windows:gcc -shared -o test.dll test.c -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32"
- Linux:gcc -shared -o libtest.so test.c -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux"
注意:这里需要将JDK的include目录和平台相关的include目录添加到编译选项中。
3. 在Java中声明本地方法
```java
public class Test {
static {
System.loadLibrary("test"); // 加载动态链接库文件
}
public static native void print(String str);
}
```
4. 实现Java本地方法
```java
Test.print("Hello, world!"); // 调用本地方法
```
这样就可以在Java中调用C代码了。