// 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 contains的用法
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站