`
- 浏览:
359421 次
- 性别:
- 来自:
福州
-
一:创建 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!
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
JNI在1997年第一次发布,本书总结了SUN工程师和大量开发者两年来积累的经验。 本书介绍了JNI的设计思想,对这种思想的理解是使用JNI的各种特性的基础。 本书有一部分是JAVA2平台上面的JNI特征的规范说明。JNI程序员...
针对所有初学JNI的人员的一个最全面的笔记,对于有过基础的朋友来说又是一个更好的助手. 省去了你自己去总结的时间,有更多的时间去敲代码. ------------黑马程序员学员-------------------
做为Android JNI还未入门的同志们,我这个总结的文档对你们真的很有用处,几乎大部分常规的Java访问C/C++以及C/C++访问Java的内容都包含在内。
JNI在1997年第一次发布,本书总结了SUN工程师和大量开发者两年来积累的经验。 本书介绍了JNI的设计思想,对这种思想的理解是使用JNI的各种特性的基础。
如题 主要介绍jni接口层的封装和类型转换 对刚学习的人有一定的其实作用 ...
自己学习中总结的基于Android Studio的jni开发
JNI在1997年第一次发布,本书总结了SUN工程师和大量开发者两年来积累的经验。 本书介绍了JNI的设计思想,对这种思想的理解是使用JNI的各种特性的基础。 本书有一部分是JAVA2平台上面的JNI特征的规范说明。JNI...
害怕英文的可以看看,不一个不错的学习资料。 这四种情况下你会用到本书: 1.在Java程序中复用以前写过的C/C++代码。...JNI在1997年第一次发布,本书总结了SUN工程师和大量开发者两年来积累的经验。
JNI在1997年第一次发布,本书总结了SUN工程师和大量开发者两年来积累的经验。 本书介绍了JNI的设计思想,对这种思想的理解是使用JNI的各种特性的基础。 本书有一部分是JAVA2平台上面的JNI特征的规范说明。JNI程序员...
JNI是java调用C++程序的一种实现方法,网上有一些相关的资料,但不一定能适用,这个文档我在学习JNI时综合网上资料总结的,本人亲测能够实现,希望下载的网友有什么问题多多反馈,希望对学习JNI的朋友有所帮助
本文档是笔者个人针对系统androidO源码,参考《深入理解安卓卷一》的基础上,将案例MediaScanner的JNI通信整个流程进行了梳理,全文结构按照从上到下的结构进行了分析与总结。
总结了jni C C++中常用的函数的使用方法,并给出了实例源码。对于编写学习jni的人员有很大的帮助
JNI是java调用C++程序的一种实现方法,网上有一些相关的资料,但不一定能适用,这个文档我在学习JNI时综合网上资料总结的,本人亲测能够实现,希望下载的网友有什么问题多多反馈,希望对学习JNI的朋友有所帮助
如何配置NDK环境,配置环境中可能出现问题,如何编写NDK代码等等
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 通过...
这个是我在学习jni中经常使用到的资源,我现在共享下。
本篇文章通过学习Java反射中java.beans包,吧知识点做了总结,并把相关内容做了关联,对此有需要的朋友可以学习参考下。
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 数据...
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 数据类型转换...
2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 ...