ncnn笔记:02)ncnn之JNI入门初窥

机器·深度学习 专栏收录该内容
37 篇文章 2 订阅

上篇介绍了在andriod上快速搭建深度学习模型,本篇粗略介绍下JNI

JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++).这是百度百科上说的.通俗来说,就是JAVA调用C/C++函数的接口.如果你要想调用C系列的函数,你就必须遵守这样的约定.

比如在C:\Users\Javis\Desktop\jni\下有个java文件需调用一个返回值为字符串的C++函数

public  class NativeDemo {
	//C++待生成的动态链接库,先挖个坑
	static{
		System.load("C:\\Users\\Javis\\Desktop\\jni\\NativeDemo.dll");
	}
	//待调用的C++函数,先挖个坑
	public native String sayHello();
	
	public static void main(String[] args) {
		NativeDemo demo=new NativeDemo();
		System.out.println(demo.sayHello());
	}
}

使用下面的java命令自动生成待调用的C++头文件

javac -encoding utf-8  NativeDemo.java
javah NativeDemo

生成的NativeDemo.h文件如下

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class NativeDemo */

#ifndef _Included_NativeDemo
#define _Included_NativeDemo
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     NativeDemo
 * Method:    sayHello
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_NativeDemo_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

定义一个cpp文件实现Java_NativeDemo_sayHello这个函数

#include "NativeDemo.h"

JNIEXPORT jstring JNICALL Java_NativeDemo_sayHello(JNIEnv* env, jobject job){
	return env->NewStringUTF("hello javis");
}

编译生成动态链接库NativeDemo.dll (jni.h需添加2个头文件目录,注意修改成自己的jdk目录)

g++  -shared  -I "C:\Program Files\Java\jdk1.8.0_91\include" -I "C:\Program Files\Java\jdk1.8.0_91\include\win32"  -o NativeDemo.dll  NativeDemo.cpp 

重新编译java文件

javac -encoding utf-8  NativeDemo.java

运行结果

C:\Users\Javis\Desktop\jni>java NativeDemo
hello javis

参考链接:
https://blog.csdn.net/dmw412724/article/details/81477546
https://www.jianshu.com/p/6cbdda111570

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值