• Intellij Java JNI 调用 C++


    也可以用 JNA,但性能没有 JNI 好。JNA的Demo没有做,可以参考(https://www.bilibili.com/video/BV1xU4y1F7Ep/?spm_id_from=autoNext

    JNI 参考(https://www.runoob.com/w3cnote/jni-getting-started-tutorials.html

    Windows 下是不能调 .so
    Andorid 编译的 .so 是没办法在 linux 下运行

    代码程序:

    JNIDemo.java

    package com.vipsoft.demo;
    
    public class JNIDemo {
    
        public native void testHello(int currentTime);
    
        public static void main(String[] args) {
            //加载C文件
            System.loadLibrary("TestJNI");
            JNIDemo jniDemo = new JNIDemo();
            for (int i = 1; i <= 10; i++) {
                jniDemo.testHello(i);
            }
        }
    }

    com_vipsoft_demo_JNIDemo.h

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class com_vipsoft_demo_JNIDemo */
    
    #ifndef _Included_com_vipsoft_demo_JNIDemo
    #define _Included_com_vipsoft_demo_JNIDemo
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_vipsoft_demo_JNIDemo
     * Method:    testHello
     * Signature: (J)V
     */
    JNIEXPORT void JNICALL Java_com_vipsoft_demo_JNIDemo_testHello
      (JNIEnv *env, jobject obj, jint args);
    
    #ifdef __cplusplus
    }
    #endif
    #endif

    TestJNI.cpp

    #include "pch.h"
    #include "com_vipsoft_demo_JNIDemo.h"
    
    JNIEXPORT void JNICALL Java_com_vipsoft_demo_JNIDemo_testHello
    (JNIEnv *env, jobject obj, jint args) {
        printf("This is C++ print => %d \n", args);
    }

    下面是创建步骤,代码内容以上面的为准(一开始传参失败,后面调整了参数

    创建 Java 项目

     

     打开目录

    生成 jni 文件

    javah -classpath . -jni -encoding UTF-8 com.vipsoft.demo.JNIDemo

    生成头文件

    2. 创建一个C++项目

     

     

     右击将com_vipsoft_demo_JNIDemo.h 加载到 VS中

    新建源文件在【源文件】目录上右击选择【新建项】


     

     

      

    TestJNI.CPP

     右击项目属性,添加 JDK 目录,否则<jni.h> 会报红 

    右击生成

     

     

     也可以把DLL放在java 的resources 目录下,这样就不需要添加 VM options 了,放到外面,用参数引用,方便替换算法,无需再打包

    -Djava.library.path=

     

  • 相关阅读:
    最小点割集
    哈希链表形式
    poj 1809
    整数的分拆
    Dynamic Rankings
    Error on line 1 of document
    怎么样用JAVA取得系统的路径?
    Richfaces优化,Richfaces为何这么慢?
    null Nested exception: null
    帮助你生成组织结构图的jQuery插件 jOrgChart java程序员
  • 原文地址:https://www.cnblogs.com/vipsoft/p/15633219.html
Copyright © 2020-2023  润新知