Chinaunix首页 | 论坛 | 博客
  • 博客访问: 226244
  • 博文数量: 80
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 781
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-08 10:41
个人简介

爱莉清

文章分类

全部博文(80)

文章存档

2018年(1)

2017年(18)

2016年(49)

2015年(7)

2014年(5)

我的朋友

分类: Android平台

2016-04-08 08:57:18

第一步:新建好这些路径 mkdir -p /src/com/magc/jni
第二步建立java文件:
vim src/com/magc/jni/HelloWorld.java

package com.magc.jni;

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

第三步:计入src目录
命令:javac ./com/magc/jni/HelloWorld.java
在该HelloWorld.java所在目录下生成HelloWorld.class
然后使用javah生成头文件,
命令:javah -jni com.magc.jni.HelloWorld
在当前目录下生成com_magc_jni_HelloWorld.h头文件,此文件供C、C++程序来引用并实现其中的函数
程序清单2:com_magc_jni_HelloWorld.h
注:1)、此头文件是不需要用户编译的,直接供其它C、C++程序引用。
     2)、此头文件中的Java_com_magc_jni_HelloWorld_DisplayHello(JNIEnv *, jobject)方法,是将来与动态链接库交互的接口,并需要名字保持一致。

第四步:建立c文件  src/jni_helloworldImpl.c

#include 
#include "com_magc_jni_HelloWorld.h"
#include 

JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello(JNIEnv *env, jobject obj)
{
        printf("From jni_hellowroldImpl.c:");
        printf("hello world\n");

        return ;
}
指令的值
此C文件实现了上述头文件中的函数,注意方法函数名要保持一致。
编译生成动态库libHello.so,
命令:gcc -shared -I /usr/lib/jvm/jdk-8-sun/include -I /usr/lib/jvm/jdk-8-sun/include/linux/ jni_helloworldImpl.c -o libHello.so
成功后,便会在当前目录下生成动态链接库libHello.so文件。
有了具体实现的动态库后,就可以运行JAVA调用JNI程序类的native方法了,
命令:java -Djava.library.path=. com.magc.jni.HelloWorld
输入结果即为:From jni_helloworldImpl.cpp :Hello world ! 
阅读(1352) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~