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

本文介绍如何在Java中通过JNI调用C++代码,包括Java代码编写、编译,C++代码编写、编译成dll,以及在Java中加载并运行dll文件的全过程。

真机环境是 MacOS Big Sur 11.6.4

一、Java 代码编写、编译

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

public class HelloCpp {

    public native void SayHello();

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

在这里插入图片描述

  • 执行命令:javac HelloCpp.java -h .
    • 注意后面的 ‘.’ 是将编译后的文件放到当前路径下,可以修改到自己合适的位置
    • 在项目下我会创建一个 lib 存放编译好的 .dll 文件,jni 存放编译出来的 .h 文件
  • 编译完之后
    • class 文件对目前来说没什么用,可以删除掉,把 .h 文件移到 jni 下
      在这里插入图片描述

二、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

在这里插入图片描述

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

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

在这里插入图片描述

  • 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 文件,然后运行即可
    • 加载的位置看具体情况而定,不止这一种方法
      在这里插入图片描述
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值