我们可以通过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. oracle存储过程--导出数据库表的说明文档

    Oracle查询表的名字和comments select a.table_name,b.comments from user_tables a,ALL_TAB_COMMENTS b where a.t ...

  2. 烂泥:【解决】NFS服务器使用showmount –e命令报错

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 今天在NFS服务器使用showmount –e查看NFS共享目录时,发现系统一直显示如下错误: clnt_create: RPC: Port mappe ...

  3. Linux文件和目录

    access() //检查是否调用进程有Access这个文件的权限,如果文件是一个符号链接,会将它解引用,成功返回0,失败返回-1设errno #include <unistd.h> in ...

  4. day 2 系统分区 扩展.md

    1.分区类型 主分区: 最多只能有四个. 扩展分区: 最多只能有一个. 主分区加扩展分区最多有4个. 不能写入数据,只能包含逻辑分区. 逻辑分区 2.格式化 格式化(高级格式化)又称逻辑格式化,它是指 ...

  5. Android应用程序“.R文件”消失怎么办

    其实Android自己维护这一个 public final class R类主要是跟新资源文件,这个R.java无需我们自己去修改,如果你不了解千万不要去修改它,它定义的每个资源值都是唯一的,不会和系 ...

  6. java汉化

    http://download.eclipse.org/technology/babel/babel_language_packs/R0.13.0/luna/luna.php _x86_64版本下载地 ...

  7. 一:c语言(数据类型和运算符)

    #include <stdio.h> /*就是一条预处理命令,它的作用是通知C语言编译系统在对C程序进行正式编译之前需做一些预处理工作.*/ int main() /*C程序就是执行主函数 ...

  8. C# WebService动态调用

    前言 站在开发者的角度,WebService 技术确实是不再“时髦”.甚至很多人会说,我们不再用它.当然,为了使软件可以更简洁,更有层次,更易于实现缓存等机制,我是非常建议将 SOAP 转为 REST ...

  9. NGUI Label Color Code

    UILabel的颜色代码 NGUI的Label文档:http://www.tasharen.com/?page_id=166 you can embed colors in [RrGgBb] form ...

  10. [No00002D] “大学生还不如农民工”背后的“身份教育”困境

    日前,北京大学市场与媒介研究中心与赶集网联合发布了<90后毕业生饭碗报告>.而这份来自35万余份有效问卷的报告显示,今年应届毕业生平均起薪每月2443元,仅够买半部苹果手机,其中北京地区平 ...