以下是一个简单的Java使用JNI调用C++ SDK的代码示例
首先,假设你已经有一个C++的SDK,其中包含一个名为HelloWorld
的类,该类提供了一个名为sayHello
的函数,用于输出"Hello World!"。
- 创建Java接口类
HelloWorldJNI.java
:
public class HelloWorldJNI {
static {
System.loadLibrary("HelloWorldSDK"); // 加载C++ SDK的动态链接库
}
private native void sayHello(); // 声明本地方法
public static void main(String[] args) {
HelloWorldJNI helloWorld = new HelloWorldJNI();
helloWorld.sayHello(); // 调用本地方法
}
}
- 生成C++头文件
HelloWorldJNI.h
:
在命令行中,进入HelloWorldJNI.java
所在的目录,然后执行以下命令:
javac HelloWorldJNI.java
javah -jni HelloWorldJNI
这将生成一个名为HelloWorldJNI.h
的头文件。
- 创建C++源文件
HelloWorldJNI.cpp
:
#include "HelloWorldJNI.h"
#include <iostream>
JNIEXPORT void JNICALL Java_HelloWorldJNI_sayHello(JNIEnv *env, jobject obj) {
std::cout << "Hello World!" << std::endl;
}
- 编译C++源文件并生成动态链接库:
在命令行中执行以下命令来编译C++源文件并生成动态链接库:
g++ -c -fPIC HelloWorldJNI.cpp -o HelloWorldJNI.o
g++ -shared -o libHelloWorldSDK.so HelloWorldJNI.o
这将生成一个名为libHelloWorldSDK.so
的动态链接库。
- 运行Java代码:
在命令行中执行以下命令来运行Java代码:
java HelloWorldJNI
输出应该是"Hello World!"。
请注意,上述示例是一个简化的示例,实际上使用JNI可能涉及更多细节和复杂性。你需要根据你的具体情况进行适当的调整和修改。确保在使用JNI时采取适当的安全措施,并进行充分的测试和验证。