前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JNI:Java代码调用本地代码

JNI:Java代码调用本地代码

作者头像
BUG弄潮儿
发布2022-03-08 10:51:13
1.5K0
发布2022-03-08 10:51:13
举报
文章被收录于专栏:JAVA乐园

1. JNI概述

JNI 是 Java Native Interface 的简称

  • Java是跨平台的编程语言,但是在有些时候仍然是有需要调用本地代码(这些代码通常是由 C 与 C++ 编写的)。
  • JNI 是 Java 平台的一个功能强大的接口。这个 JNI接口提供了Java与操作系统本地代码相互调用的功能。

2. C/C++代码的步骤

  • 在 Java 类中声明一个native方法
代码语言:javascript
复制
public native void sayHello();
  • 使用 javah 命令生成包含 native 方法声明的C/C++头文件
代码语言:javascript
复制
javah com.omg.NativeLib
  • 将生成的C/C++头文件来编写C/C++源文件
代码语言:javascript
复制
#include<iostream>
#include "com_omg_NativeLib.h"
using namespace std;


JNIEXPORT void JNICALL Java_com_olive_NativeLib_sayHello (JNIEnv *, jobject){
     cout << "hello world" << endl;
}
  • 将C/C++源文件编译成动态链接库(windows对应DLL,Linux对应so)
  • 把dll文件的路径添加到环境变量PATH中
  • 在Java类中加载dll文件,然后调用声明的native方法
代码语言:javascript
复制
System.load("C:\\lib\\NativeCodeJni.dll");
NativeLib nl = new NativeLib();
nl.sayHello();

或者

System.loadLibrary("NativeCodeJni");
NativeLib nl = new NativeLib();
nl.sayHello();

3. 使用JNI弊端

  • 使用了 JNI,那么这个Java Application 将不能跨平台了。如果需要移植到别的平台上,那么需要重新编写native代码
  • Java 是强类型的语言,而 C/C++并不是。因此,在编写JNI时要更小心
  • 总之,必须在构建Java程序的时候,尽量少用本地代码
代码语言:javascript
复制
Visual studio环境配置://www.cnblogs.com/sysu-huangwei/p/7466481.html
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BUG弄潮儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. JNI概述
  • 2. C/C++代码的步骤
  • 3. 使用JNI弊端
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档