C++库封装JNI接口——实现java调用c++
时间: 2023-08-22 15:05:13 浏览: 157
好的,下面是一个简单的示例:
C++代码:
```c++
#include <jni.h>
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jstring JNICALL Java_com_example_NativeUtils_getMessage(JNIEnv *env, jobject thiz) {
const char *message = "Hello from C++!";
return env->NewStringUTF(message);
}
#ifdef __cplusplus
}
#endif
```
其中,`Java_com_example_NativeUtils_getMessage` 是 JNI 接口函数,`getMessage` 是 Java 层调用的方法名,`com_example_NativeUtils` 是 Java 类的全限定名。
Java代码:
```java
public class NativeUtils {
static {
System.loadLibrary("native-lib");
}
public static native String getMessage();
}
```
其中,`loadLibrary` 方法用于加载本地库,`getMessage` 方法对应本地方法。
在 Java 层调用本地方法时,可以直接调用 `NativeUtils.getMessage()`,即可获取到 C++ 返回的字符串。
需要注意的是,在运行之前需要将 C++ 代码编译成动态链接库,可以使用以下命令:
```shell
gcc -shared -fpic -o libnative-lib.so native-lib.cpp
```
其中,`-shared` 选项表示编译成动态链接库,`-fpic` 表示编译为位置独立代码,`-o` 指定输出文件名。
阅读全文