• 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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

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

    >> javac NativeTrait.java
    
    • 1

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

    >> javah NativeTrait
    
    • 1

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

    #include "NativeTrait.h"
    #include 
    #include 
    
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.6 编译生成dll库

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

    2.7 测试效果

    >> java NativeTrait
    
    • 1

    java输出结果

    3.参考资料

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

  • 相关阅读:
    linux deepin系统 php多版本
    【ESD专题】静电防护物品、静电测试工具及防静电符号
    P1506 拯救oibh总部
    vue学习-02vue入门之组件
    Python内置函数12——map
    sandman_nc_2016
    java-net-php-python-jspm家教信息管理系统演示录像(1)计算机毕业设计程序
    ADS村田电感.mod(spice netlist文件)和.s2p模型导入与区别
    【C++入门】拷贝构造&&运算符重载
    LuatOS-SOC接口文档(air780E)--audio - 多媒体音频
  • 原文地址:https://blog.csdn.net/sinat_31425585/article/details/126306860