Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java调用c++库

作者:铁打的心,也会穿孔,   发布日期:2025-09-19   浏览:89

// 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

解释说明:

  1. Java 代码部分

    • HelloWorld 类中声明了一个 native 方法 sayHello,表示这个方法将由本地代码(如 C++)实现。
    • 使用 System.loadLibrary("hello") 来加载编译好的 C++ 动态库。库文件名应为 libhello.so(Linux)或 hello.dll(Windows)。
  2. C++ 代码部分

    • hello.cpp 文件实现了 HelloWorld 类中的 sayHello 方法。
    • 使用 extern "C"JNIEXPORT 来确保方法名称不会被 C++ 编译器修改(即避免名称修饰),以便 JNI 可以正确找到该方法。
    • JNIEnvjobject 是 JNI 提供的参数,用于与 Java 环境交互。
  3. 编译和运行

    • 编译 C++ 代码时需要指定 JNI 头文件路径,并生成共享库文件(如 .so.dll)。
    • 最后,通过 java HelloWorld 运行 Java 程序,调用 C++ 实现的方法。

上一篇:java object转list

下一篇:java contains的用法

大家都在看

java连接数据库的代码

java djl

ubuntu 卸载java

java读取excel中的图片

java新建

java sort用法

java collections.sort

java file类的方法

java发送qq邮件

java 判断

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站