// Java 调用 C++ 库的示例代码
// 1. 首先,我们需要创建一个 JNI 接口类 (Java Native Interface)
public class HelloWorld {
// 声明一个本地方法,该方法将在 C++ 中实现
public native void sayHello();
// 加载 C++ 编译后的动态库
static {
System.loadLibrary("hello"); // 动态库文件名为 libhello.so 或 hello.dll
}
public static void main(String[] args) {
new HelloWorld().sayHello(); // 调用本地方法
}
}
// 2. 然后,我们需要编写对应的 C++ 代码来实现这个本地方法
// 文件名: hello.cpp
#include <jni.h>
#include <iostream>
// 实现 HelloWorld 类中的 sayHello 方法
extern "C" JNIEXPORT void JNICALL
Java_HelloWorld_sayHello(JNIEnv *env, jobject /* this */) {
std::cout << "Hello from C++!" << std::endl;
}
// 3. 编译 C++ 代码为动态库
// 在 Linux 上:
// g++ -shared -fPIC -o libhello.so -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux hello.cpp
// 在 Windows 上:
// cl /MD /LD /I"%JAVA_HOME%\include" /I"%JAVA_HOME%\include\win32" hello.cpp
// 4. 运行 Java 程序
// java HelloWorld
Java 代码部分:
HelloWorld 类中声明了一个 native 方法 sayHello,表示这个方法将由本地代码(如 C++)实现。System.loadLibrary("hello") 来加载编译好的 C++ 动态库。库文件名应为 libhello.so(Linux)或 hello.dll(Windows)。C++ 代码部分:
hello.cpp 文件实现了 HelloWorld 类中的 sayHello 方法。extern "C" 和 JNIEXPORT 来确保方法名称不会被 C++ 编译器修改(即避免名称修饰),以便 JNI 可以正确找到该方法。JNIEnv 和 jobject 是 JNI 提供的参数,用于与 Java 环境交互。编译和运行:
.so 或 .dll)。java HelloWorld 运行 Java 程序,调用 C++ 实现的方法。上一篇:java object转list
下一篇:java运算符优先级
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站