Window上Java通过jni调用C++入门尝鲜

1.起因

最近要和服务端对接一些功能,需要将一些C++开发的功能对接给服务端接入,但是他们服务端开发用的是java,所以才有了这个问题:如何使用Java调用C++?问题的答案就是:使用jni做一层java到C++的数据格式转换,然后用java调用C++。

2.方法

2.1 环境搭建

这里需要安装两个工具:jdk和mingw
jdk安装成功标准:
(1) java命令正常使用:cmd中输入java,运行
java
(2) javac命令正常使用:cmd中输入javac,运行:
javac
mingw安装成功标志:
(1) gcc正常使用:输入gcc -v
gcc
(2) g++正常使用:输入g++ -v
g++

2.2 写一个java程序:NativeTrait.java

public class NativeTrait {
    public native static int isMarkOK(String filename);

    static {
        System.load("E:/Code/jni/MarkAR/libMarkAR.dll");
    }

    public static void main(String[] args) {
        NativeTrait trait = new NativeTrait();
        String filename = "E:/data/zq/miguqingfeng.jpg";
        int ret = trait.isMarkOK(filename);
        System.out.println(ret);
    }
}

2.3 编译java程序,生成.class文件

>> javac NativeTrait.java

2.4 生成对应头文件:NativeTrait.h

>> javah NativeTrait

2.5 新建NativeTrait.cc实现对应方法

#include "NativeTrait.h"
#include <string>
#include <iostream>

JNIEXPORT jint JNICALL Java_NativeTrait_isMarkOK(JNIEnv *env, jclass obj, jstring path_) {
    std::string path = std::string(env->GetStringUTFChars(path_, 0));
    std::cout << "Input path is: " << path << std::endl;
    return 0;
}

2.6 编译生成dll库

>> g++ -Wl,--add-stdcall-alias -shared -o libMarkAR.dll NativeTrait.cc

2.7 测试效果

>> java NativeTrait

java输出结果

3.参考资料

[1] https://blog.csdn.net/dashu_java/article/details/119326520
[2] https://blog.csdn.net/azure_sky_2014/article/details/71915605

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:黑客帝国 设计师:我叫白小胖 返回首页
评论

打赏作者

MirrorYuChen

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值