Java JNI:Native 方法调用 C++ 程序

真机环境是 MacOS Big Sur 11.6.4

目录

  • 一、Java 代码编写、编译
  • 二、C++ 代码编写、环境配置、dll 编译
  • 三、加载 dll 文件、运行程序

一、Java 代码编写、编译

  • 首先把代码先编写完成
package top.acware.test;

public class HelloCpp {

    public native void SayHello();

}
  • 编写完成之后需要对代码进行编译,在 Idea 下直接打开命令行
    • Win 环境的可以使用 Cmd 命令

Java JNI:Native 方法调用 C++ 程序_第1张图片

  • 执行命令:javac HelloCpp.java -h .
    • 注意后面的 ‘.’ 是将编译后的文件放到当前路径下,可以修改到自己合适的位置
    • 在项目下我会创建一个 lib 存放编译好的 .dll 文件,jni 存放编译出来的 .h 文件
  • 编译完之后
    • class 文件对目前来说没什么用,可以删除掉,把 .h 文件移到 jni 下
      Java JNI:Native 方法调用 C++ 程序_第2张图片

二、C++ 代码编写、环境配置、dll 编译

  • 这里需要用到 Java 的 jni.hjni_md.h,我把他们复制到 jni 目录下
    • 在 $JAVA_HOME/include 里有 jni.h,$JAVA_HOME/include/darwin 有 jni_md.h
      • Win 环境下应该是 $JAVA_HOME/include/win32 目录下有 jni_md.h

Java JNI:Native 方法调用 C++ 程序_第3张图片

  • 编写 C++ 代码
    • 复制编译出来的 .h 文件,放到 lib 下修改后缀名为 .cpp
#include 
#include 
#include 
using namespace std;

JNIEXPORT void JNICALL Java_top_acware_test_HelloCpp_SayHello
  (JNIEnv *, jobject){
    cout<<"CPP Say: Hello!"<<endl;
  }

Java JNI:Native 方法调用 C++ 程序_第4张图片

  • dll 编译
    • 同样的方式打开 Idea 的命令行(.cpp 文件下的路径),输入命令进行编译
    • clang++ -I …/jni -shared -o top_acware_test_HelloCpp.dll top_acware_test_HelloCpp.cpp
      • -I 是指定头文件在哪
      • 我的 Mac 环境安装的是 clang++,也可以使用 gcc,只需要把 clang++ 改成 gcc 即可,命令是一样的

三、加载 dll 文件、运行程序

  • 修改 Java 代码进行加载 dll 文件,然后运行即可
    • 加载的位置看具体情况而定,不止这一种方法
      Java JNI:Native 方法调用 C++ 程序_第5张图片

你可能感兴趣的:(Java,小知识点,java,c++)