JNI 的hello world 案例,java调C,C返回“JNI Hello“ 字符串,java得到后打印出来

JNI 的hello world 案例,java调C,C返回“JNI Hello“ 字符串,java得到后打印出来,第1张

JNI 的hello world 案例,java调C,C返回“JNI Hello“ 字符串,java得到后打印出来 一、用IDEA创建java项目

1、写一个带有native修饰的方法,注意包路径

package top.yumbo.jni;

public class JNIHelloWorld {

    public static native String hello();

}

2、生成文件
java10以后去除了javah,采用javac -h 代替
命令格式如下:javac -h 生成的.h文件目录 .java源文件

javac -h ./ top/yumbo/jni/JNIHelloWorld.java

java10以前可以使用生成头文件

javah -jni top/yumbo/jni/JNIHelloWorld.java

生成的_Included_top_yumbo_jni_JNIHelloWorld.h 名称可能会不一样,根据自己的结构和代码生成。

#include 


#ifndef _Included_top_yumbo_jni_JNIHelloWorld
#define _Included_top_yumbo_jni_JNIHelloWorld
#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT jstring JNICALL Java_top_yumbo_jni_JNIHelloWorld_hello
  (JNIEnv * env, jclass jobj);

#ifdef __cplusplus
}
#endif
#endif

3、复制 JAVA_HOME 下的 include文件夹下的jni.h,以及include/win32里的jni_md.h

路径参考如下:根据自己的 JDK 路径找


将其复制到D:Program Filesmingw64x86_64-w64-mingw32include下,与你的MingGW存放路径有关
我的路径如下

下载好Clion 并且搭建好环境(环境搭建点击这里) 二、用Clion创建C++ Library / C Library项目选其中一个,取决于用哪一种语言写lib

2.1 把默认生成的c/cpp/h文件删除,目录结构如下,将javac编译生成的.h文件更名为.cpp文件(偷懒,因为头文件include就是全部引入到.c/.cpp文件中,和同一个文件是同一个道理)
直接修改函数声明,直接就是函数声明+定义如下代码(比较简单,自己手敲吧)

修改CMakeLists.txt文件,因为项目编译就是根据这个文件记录那些文件要进行编译才会编译成dll或者exe文件

cmake_minimum_required(VERSION 3.17)
project(hello) // 项目名称

set(CMAKE_CXX_STANDARD 14)

add_library(hello SHARED top_yumbo_jni_JNIHelloWorld.cpp) //第一个是项目名称,第二个是我们.h修改为.cpp后加了函数实现的文件

2.2 进行编译,build -> build project 即可完成编译。注意这里面因为用到了jni,所以需要确保没有报红信息


三、回到IDEA如下 *** 作

package top.yumbo.jni;

public class JNIHelloWorld {

    public static native String hello();

}
package top.yumbo.jni;

public class JNIDemo {

    public static void main(String[] args) {

        // 1.加载dll文件,如果是System.load()需要加上.dll后缀,下面这个不需要后缀
        System.loadLibrary("src/top/yumbo/jni/lib/libhello");
        String hello = JNIHelloWorld.hello();// 2.通过jni调用dll函数,得到返回值
        System.out.println(hello);// 3.打印返回值
    }

}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5712510.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存