java程序如何调用c/c++库中的函数主要分为三个步骤:

  1. 加载库文件. System.loadLibrary

  2. 找到函数( java函数<----映射---->c函数 )

  3. 调用函数

在映射中一般分为显式建立和隐式建立。

显式建立:

下面举个例子:

/*filename native.ccommod: gcc -shared -o libnative.so native.c -I/usr/lib/jvm/java-1.7.0-openjdk-amd64/include -fPIC
*/
#include <stdio.h>
#include <jni.h>  /* /usr/lib/jvm/java-1.7.0-openjdk-amd64/include */int  c_hello( JNIEnv *env, jobject cls, jint num )
{printf("hello  c/c++ num=%d\r\n",num);return num*2;
}/* 2. java <--> C */static const JNINativeMethod methods[] = {{"hello","(I)I",(void *)c_hello},            /* java function  参数  c function*/
};JNIEXPORT jint JNICALLJNI_OnLoad( JavaVM *jvm, void *reserved )
{JNIEnv *env;jclass cls;/* 获取运行环境 */if((*jvm)->GetEnv(jvm,(void **)&env,JNI_VERSION_1_4))return JNI_ERR;/* 获取java中的类 */cls = (*env)->FindClass(env,"JNIDemo");if(cls==NULL)return JNI_ERR;/* 函数映射 */if((*env)->RegisterNatives(env, cls, methods,1)<0)return JNI_ERR;return JNI_VERSION_1_4;
}

java代码:

/*
*   filename JNIDemo.java
*   commod: javac JNIDemo.java
* */
public class JNIDemo {static {/* 1. load */System.loadLibrary("native"); /*libnative.so*/}public native static  int hello( int num );public static  void main( String args[] ){/* 2. java <--> C *//* 3. call */System.out.println( hello(123) );}
}

jni中字段描述符:

也可以通过java来生成头文件从而获取描述符。

先编译java程序   javac JNIDemo.java

            javah -jni JNIDemo
将会生成 JNIDemo.h:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class JNIDemo */#ifndef _Included_JNIDemo
#define _Included_JNIDemo
#ifdef __cplusplus
extern "C" {
#endif
/** Class:     JNIDemo* Method:    hello* Signature: (I)I*/
JNIEXPORT void JNICALL Java_JNIDemo_hello(JNIEnv *, jclass);#ifdef __cplusplus
}
#endif
#endif

转载于:https://www.cnblogs.com/ynxf/p/6897462.html

JAVA程序通过JNI调用C/C++库相关推荐

  1. Java中使用JNI调用本地动态库的方法

    在Java中,要使用动态库,就要使用到 JNI.首先来看看百度百科对JNI的描述:从Java1.1开始,Java Native Interface(JNI)标准成为Java平台的一部分,它允许Java ...

  2. Java如何利用JNI调用C++(简略介绍及步骤)

    Java如何利用JNI调用C++(简略介绍及步骤) 文章目录 Java如何利用JNI调用C++(简略介绍及步骤) 一.原理介绍 二.详细步骤 步骤一:编写Java类 步骤二:生成.h文件 步骤三:CL ...

  3. arch linux arm下载_linux系统下编译给android JNI调用的Gmssl库

    编译给android JNI调用的Gmssl库的方法,网络上并不多.按照叶大强(CSDN账号:hkNaruto)写的<GmSSL Android NDK编译 (版本95c0dba>的帖子编 ...

  4. java主程序怎样调用子程序_存过和函数以及在Java程序中的调用

    存储过程,函数都是数据库的对象. 创建和调用 存储在数据库中的子程序,是由plsql语言写的,完成特定功能的程序. 函数可以返回值,存过不能返回值.除此之外,一致. create procedure ...

  5. 车辆入库java程序_java扫描入库及出库,基于谷歌类开发.仅提供完整代码 连接SQL使用,...

    java扫描入库及出库,基于谷歌类开发.仅提供完整代码 连接SQL使用,需要自行制作中心服务器,中心服务器代码在本人另一实例里面,请自行下载 [实例简介] 扫描入库及出库,基于谷歌类开发.仅提供完整代 ...

  6. java程序设计项目案例化教程题库及答案

    章节自测 1.第01章:走进Java的世界 1.1.填空题 1. Java源程序文件的后缀是*.java,Java字节码文件的后缀名称是*.class. 2. Java程序实现可移值性,依靠的是JVM ...

  7. Windows系统下通过JNI调用dll动态库的实现

    目的:java代码使用jni获取数据 工具: eclipse + Microsoft visual studio (c++) 业务代码: Java代码业务实现: package com.weip.jn ...

  8. windows7下,Java中利用JNI调用c++生成的动态库的使用步骤

    1.从http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html下载jdk-7u2-wi ...

  9. Ubuntu下,Java中利用JNI调用codeblocks c++生成的动态库的使用步骤

    1.  打开新立得包管理器,搜索JDK,选择openjdk-6-jdk安装: 2.  打开Ubuntu软件中心,搜索Eclipse,选择Eclipse集成开发环境,安装: 3.  打开Eclipse, ...

最新文章

  1. linux漏洞知乎_安装 Manjaro Linux 后必做的 6 件事 | Linux 中国
  2. 亚马逊AWS-EC2云服务器部署代理服务
  3. 搜索引擎索引之索引基础
  4. css两列布局之基于BFC规则实现
  5. Vue之splice和push
  6. Linux(CentOS)安装apache(httpd),其他电脑无法访问的原因 【iptables打开某端口】
  7. 讯飞输入法更新10.0版本 上线全新A.I.语音输入引擎
  8. Scott Mitchell 的ASP.NET 2.0数据教程之十七:: 研究插入、更新和删除的关联事件
  9. 图纸怎么发给别人_微信语音怎么转发?微信语音转发给别人最新办法10秒解决...
  10. matlab三维绘图函数plot3【matlab图行绘制四】
  11. matlab拟合反比例函数,y与x的函数关系式图像 已知变量y与x之间的函数
  12. select去重 sqlserver_SQLSERVER 去重
  13. 飞思卡尔mc9s08烧录方法_飞思卡尔8位单片机MC9S08教程
  14. 计算机一级mcoffice考试题型,计算机一级MSOffice考试试题
  15. Android 房租计算器,简单计算器
  16. [latex] 页码起始页设置
  17. js 免费可靠cdn地址(富文本编辑器tinymce的实践)
  18. Mysql中大于、大于等于、小于、小于等于的写法
  19. 浏览器兼容性问题总结
  20. SFD:今年怎么了?

热门文章

  1. 守卫者的挑战(guard)
  2. jenkins之从0到1利用Git和Ant插件打war包并自动部署到tomcat(第二话):安装插件,配置JDK、Git、Ant...
  3. php 连接oracle插入多张图片的方法
  4. JavaSE----基础语法(方法)
  5. 7个鲜为人知却超实用的PHP函数
  6. objective-c 类目(Category)和延展(Extension)
  7. win7乱码 字符集解决方案
  8. 网站建设——从无到有
  9. Maven-Dependency Mechanism
  10. cnetos6,centos7添加新网卡,系统不识别的解决办法