我们可以通过jni来调用c/c++程序,C/C++一般会被作为动态库的形式来供java程序调用

环境


操作系统:Centos6.7

java: openjdk7

依赖包:java7-devel(yum install -y java7-devel)

java程序


在hava程序中会调用本地方法,而这个本地方法使用C语言实现的。

public class HelloWorld{
static {
System.loadLibrary("Hello");
} public native void DisplayHello(); public static void main(String[] args){
new HelloWorld().DisplayHello();
}
}

编译java程序:javac HelloWorld.java

生成相应的头文件:javah -jni HelloWorld

下面是生成的HelloWorld.h的内容,其中的白色部分就是需要在C代码中实现的函数。

C程序


#include<jni.h>
#include"HelloWorld.h"
#include<stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_DisplayHello(JNIEnv *env, jobject obj){
printf("Hello world\n");
return;
}

在C程序中,我们需要包含jni.h以及刚才生成的HelloWorld.h。如果从C的角度来看,一般一个.h文件会对应一个.c文件。而.h文件中一般是函数的声明,而.c文件是具体函数的实现。HelloWorld.h中有函数的声明,而C程序中就应该有函数的实现。

这样,但是通过javah生成.h文件时,剩下的工作就是C方面的编程问题了。

将C程序生成动态库:

在生成动态库的时候需要制定头文件(jni.h)的位置,安装java依赖库的时候会将其安装到/usr/local下,所以需要用-I选项来明确指出

执行


在执行的时候需要指定C库的位置

参考博文:

http://blog.csdn.net/banketree/article/details/40535325

http://www.cnblogs.com/mandroid/archive/2011/06/15/2081093.html

jni的使用方法的更多相关文章

  1. HAL中通过JNI调用java方法【转】

    转载请注明本文出处:http://www.cnblogs.com/xl19862005 作者:Xandy 由于工作的需要,最近一直在研究HAL.JNI.Java方法之间互调的问题,并做了如下一些记录和 ...

  2. 【转】Android中JNI的使用方法

    Android中JNI的使用方法 首先看一下Android平台的框架图:(网上盗用) 可以看到Android上层的Application和ApplicationFramework都是使用Java编写, ...

  3. 一键生成JNI头文件方法二

    经常使用java的同学一定都接触过JNI(Java Native Interface)吧.JNI为我们提供了java<---->C/C++之间的接口,使得我们可以在java中调用C程序,以 ...

  4. android开发源代码分析--多个activity调用多个jni库的方法

    android开发源代码分析--多个activity调用多个jni库的方法 有时候,我们在开发android项目时会遇到须要调用多个native c/jni库文件,下面是本人以前实现过的方法,假设有知 ...

  5. java native interface JNI 调用Java方法

    在上一篇文章中介绍了JNI.以及java调用JNI.这篇讲一下 JNI调用java方法. 通过使用合适的JNI函数,你能够创建Java对象,get.set 静态(static)和 实例(instanc ...

  6. Android中JNI的使用方法(转载)

    Android中JNI的使用方法 首先看一下Android平台的框架图:(网上盗用) 可以看到Android上层的Application和ApplicationFramework都是使用Java编写, ...

  7. android JNI 调用NDK方法

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  8. 关于JNI的使用方法

    1首先在java里面定义你需要的native方法 2打开cmd,进入doc窗口,如果是android项目就进入到你当前项目的bin目录下,在doc里面输入cd E:\workspace\Test1 也 ...

  9. Android Studio中JNI -- 1 -- 配置方法

    1.配置NDK 1.1 下载NDK Android Studio 1.2 配 android-ndk-r10e,不同版本的Studio需要配置不同的ndk,下载完成后,随便解压放至某个文件目录下 1. ...

随机推荐

  1. 烂泥:学习mysql数据库主从同步复制原理

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 说明本篇文章部分转载自互联网. MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对 ...

  2. 烂泥:NFS做存储与KVM集成

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 以前有关NFS的文章,我们介绍的都是NFS的使用挂载等等.这篇文章我们介绍有关NFS作为存储使用. 既然本篇文章的主题是有关NFS的,我们还是先把NFS ...

  3. iOS沙盒路径变化的说明详解

    最近用沙盒存储文件的时候发现了一个奇怪的现象,由于业务需要,我会将保存的文件绝对路径保存以便下次读取. 于是发现一个找不到的现象,即上一次保存下的绝对路径,再第二次打开app去查找的时候,发现找不到. ...

  4. who

    查看当前系统中当前登录的帐户 $who jiang :0 2016-10-13 08:55 (:0) jiang pts/4 2016-10-13 09:03 (:0) jiang pts/1 201 ...

  5. position&containing block

    一.包含块(Containing Block) 要讲position,首先就涉及到一个概念:包含块. 1.包含块介绍 包含块简单理解就是一个定位参考块,就是"大盒子里套小盒子"中那 ...

  6. [转]Dropdownlist doesn't postback after Page_ClientValidate()

    本文转自:http://stackoverflow.com/questions/2083929/dropdownlist-doesnt-postback-after-page-clientvalida ...

  7. POJ1386Play on Words[有向图欧拉路]

    Play on Words Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11846   Accepted: 4050 De ...

  8. AC日记——计算多项式的导函数 openjudge 1.5 38

    38:计算多项式的导函数 总时间限制:  1000ms 内存限制:  65536kB 描述 计算多项式的导函数是一件非常容易的任务.给定一个函数f(x),我们用f'(x)来表示其导函数.我们用x^n来 ...

  9. Unity打包同一文件Hash不一样

    问题起因 游戏开发基本都会涉及到资源版本管理及更新,本文记录我在打包过程中遇到的一小问题: 开过中常用于标记资源版本的方法有计算文件Hash.VCS的版本等. 在Unity中对同一个资源文件进行多次打 ...

  10. luogu1097统计数字[noip2007提高组Day1T1]

    题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出 ...