`
huangqinqin
  • 浏览: 359421 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

JNI学习总结

 
阅读更多
一:创建 HelloNative.java文件
vim HelloNative.java

class HelloNative {
public native static void greeting();
static {
System.loadLibrary("HelloNative");
}
}

二:编译 HelloNative.java 生成 HelloNative.class文件。
javac HelloNative.java

ls查看编译结果:
HelloNative.class  HelloNative.java

三:利用javah产生一个C的头文件。javah可执行文件可以在jdk/bin目录下查找到。
javah HelloNative

ls查看结果:
HelloNative.class  HelloNative.h  HelloNative.java

四:编写HelloNative.c文件
vim HelloNative.c

#include "HelloNative.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_HelloNative_greeting(JNIEnv* env, jclass cl)
{
printf("Hello Native World!\n");
}

五:生成libHelloNative.so文件
gcc -fPIC -I /usr/lib/jvm/default-java/include -I /usr/lib/jvm/default-java/include/linux -shared -o libHelloNative.so HelloNative.c

ls查看结果:
HelloNative.c  HelloNative.class  HelloNative.h  HelloNative.java  libHelloNative.so

六:在HelloNative.java中加载libHelloNative.so库,如:
static {
System.loadLibrary("HelloNative");
}

七:编写测试代码HelloNativeTest.java
vim HelloNativeTest.java

class HelloNativeTest {
public static void main(String[] args) {
HelloNative.greeting();
return;
}
}

八:编译HelloNativeTest.java文件
javac HelloNativeTest.java

ls查看结果:
HelloNative.c  HelloNative.class  HelloNative.h  HelloNative.java  HelloNativeTest.class  HelloNativeTest.java  libHelloNative.so

当执行java HelloNativeTest 时,会报如下错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681)
at java.lang.Runtime.loadLibrary0(Runtime.java:840)
at java.lang.System.loadLibrary(System.java:1047)
at HelloNative.<clinit>(HelloNative.java:4)
at HelloNativeTest.main(HelloNativeTest.java:3)

这时需要执行第九步。

九:把当前目录添加到库路径中:
java -Djava.library.path=. HelloNativeTest

或者 export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

十:终端输出最终结果:
Hello Native World!
分享到:
评论

相关推荐

    JNI编程指南书

    JNI在1997年第一次发布,本书总结了SUN工程师和大量开发者两年来积累的经验。 本书介绍了JNI的设计思想,对这种思想的理解是使用JNI的各种特性的基础。 本书有一部分是JAVA2平台上面的JNI特征的规范说明。JNI程序员...

    黑马程序员JNI学习笔记

    针对所有初学JNI的人员的一个最全面的笔记,对于有过基础的朋友来说又是一个更好的助手. 省去了你自己去总结的时间,有更多的时间去敲代码. ------------黑马程序员学员-------------------

    Android JNI 学习笔记

    做为Android JNI还未入门的同志们,我这个总结的文档对你们真的很有用处,几乎大部分常规的Java访问C/C++以及C/C++访问Java的内容都包含在内。

    JNI编程指南

    JNI在1997年第一次发布,本书总结了SUN工程师和大量开发者两年来积累的经验。 本书介绍了JNI的设计思想,对这种思想的理解是使用JNI的各种特性的基础。

    jni 开发入门总结

    如题 主要介绍jni接口层的封装和类型转换 对刚学习的人有一定的其实作用 ...

    jni学习demo

    自己学习中总结的基于Android Studio的jni开发

    Jni编程技术

    JNI在1997年第一次发布,本书总结了SUN工程师和大量开发者两年来积累的经验。 本书介绍了JNI的设计思想,对这种思想的理解是使用JNI的各种特性的基础。 本书有一部分是JAVA2平台上面的JNI特征的规范说明。JNI...

    JNI编程指南-中文版

    害怕英文的可以看看,不一个不错的学习资料。 这四种情况下你会用到本书: 1.在Java程序中复用以前写过的C/C++代码。...JNI在1997年第一次发布,本书总结了SUN工程师和大量开发者两年来积累的经验。

    Java程序中JNI的编程指南

    JNI在1997年第一次发布,本书总结了SUN工程师和大量开发者两年来积累的经验。 本书介绍了JNI的设计思想,对这种思想的理解是使用JNI的各种特性的基础。 本书有一部分是JAVA2平台上面的JNI特征的规范说明。JNI程序员...

    JNI快速实现入门(java调用C++程序的方法)

    JNI是java调用C++程序的一种实现方法,网上有一些相关的资料,但不一定能适用,这个文档我在学习JNI时综合网上资料总结的,本人亲测能够实现,希望下载的网友有什么问题多多反馈,希望对学习JNI的朋友有所帮助

    基于AndroidO平台JNI机制的学习

    本文档是笔者个人针对系统androidO源码,参考《深入理解安卓卷一》的基础上,将案例MediaScanner的JNI通信整个流程进行了梳理,全文结构按照从上到下的结构进行了分析与总结。

    android jni常用函数详解

    总结了jni C C++中常用的函数的使用方法,并给出了实例源码。对于编写学习jni的人员有很大的帮助

    JAVA +jni c# 参数传递.rar

    JNI是java调用C++程序的一种实现方法,网上有一些相关的资料,但不一定能适用,这个文档我在学习JNI时综合网上资料总结的,本人亲测能够实现,希望下载的网友有什么问题多多反馈,希望对学习JNI的朋友有所帮助

    NDK学习总结

    如何配置NDK环境,配置环境中可能出现问题,如何编写NDK代码等等

    《深入理解Android》卷Ⅰ

    2.2 学习JNI的实例:MediaScanner 2.3 Java层的MediaScanner分析 2.3.1 加载JNI库 2.3.2 Java的native函数和总结 2.4 JNI层MediaScanner的分析 2.4.1 注册JNI函数 2.4.2 数据类型转换 2.4.3 JNIEnv介绍 2.4.4 通过...

    C语言编程思想总结

    这个是我在学习jni中经常使用到的资源,我现在共享下。

    Java反射中java.beans包学习总结

    本篇文章通过学习Java反射中java.beans包,吧知识点做了总结,并把相关内容做了关联,对此有需要的朋友可以学习参考下。

    《深度理解Android:第一卷》

    2.2 学习JNI的实例:MediaScanner / 15 2.3 Java层的MediaScanner分析 / 16 2.3.1 加载JNI库 / 16 2.3.2 Java的native函数和总结 / 17 2.4 JNI层MediaScanner的分析 / 17 2.4.1 注册JNI函数 / 18 2.4.2 数据...

    深入理解Android卷1全

    2.2 学习JNI的实例:MediaScanner / 15 2.3 Java层的MediaScanner分析 / 16 2.3.1 加载JNI库 / 16 2.3.2 Java的native函数和总结 / 17 2.4 JNI层MediaScanner的分析 / 17 2.4.1 注册JNI函数 / 18 2.4.2 数据类型转换...

    java 编程入门思考

    2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...

Global site tag (gtag.js) - Google Analytics