`
huangqinqin
  • 浏览: 365697 次
  • 性别: 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!
分享到:
评论

相关推荐

    android studio 下jni学习

    总结来说,Android Studio中的JNI学习涉及项目配置、数据类型转化、本地方法调用以及可能的JSON操作。理解这些基础知识是掌握JNI的关键,这能帮助开发者在遇到需要混合编程的场景时游刃有余。在实际应用中,务必注意...

    android JNI学习三实例

    总结,通过"android JNI学习三实例",我们可以掌握JNI的基本使用,理解如何在Android应用中集成C/C++代码,以及如何利用JNI进行跨语言交互,从而提高应用的性能和功能。实践中,我们需要结合具体的项目需求和性能...

    JNI学习笔记.doc

    ### JNI学习笔记详解 #### 一、JNI简介 JNI(Java Native Interface)是Java平台提供的一种强大机制,它允许Java程序直接调用本地代码(通常是C或C++编写)。这为Java应用程序带来了额外的灵活性,使得开发者能够...

    JNI学习二:字符串参数传递与返回值

    JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码...这个示例中的"JNI学习二:字符串参数传递与返回值"就是一个很好的起点,通过实践可以深入理解JNI的工作原理和使用技巧。

    android_JNI学习(记录文档+参考代码)

    总结起来,Android JNI的学习涉及环境配置、头文件生成、原生代码编写、编译生成.so文件以及Java调用原生函数等多个步骤。这个资源提供了一个完整的实践环境,适合初学者深入理解和掌握JNI技术。通过实际操作和参考...

    黑马程序员JNI学习笔记

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

    jni学习例子 在linux下执行成功

    在本示例中,我们看到的是一个JNI的学习实践,它在Linux环境下成功地执行了。这个例子展示了如何通过Java调用本地(C/C++)代码,并且提供了完整的流程,包括从Java类型转换为C类型,特别是将`jstring`转化为`char`...

    JNI学习三-简单类型数组访问

    总结来说,JNI为Java和C/C++之间的通信提供了一种强大而灵活的方式。通过学习如何访问和操作简单类型数组,我们可以利用C/C++的性能优势处理大规模数据或执行低级操作,同时保持Java代码的可移植性和易维护性。在...

    jni教程实例手把手

    1. **Android_JNI总结.doc**:这份文档可能是对Android平台上JNI应用的总结,涵盖了JNI的基本概念、环境设置、头文件生成、本地方法定义、本地函数实现以及在Android Studio中的配置步骤。通过阅读,学习者可以了解...

    android JNI学习四实例

    Android JNI(Java Native Interface)是...通过学习这些实例,你可以掌握JNI的基本用法,包括调用本地方法、数据类型转换、回调以及文件操作等。这些知识对于开发高性能的Android应用或利用现有C/C++库至关重要。

    JNI学习指南(java 调用C/C++接口)

    ### JNI学习指南:Java调用C/C++接口详解 #### 一、引言 随着软件开发领域的不断发展,跨语言编程成为一种重要的技能。Java作为一种广泛使用的编程语言,因其跨平台特性和丰富的生态系统受到欢迎。然而,Java作为一...

    JNI CHM文档以及JNI编程规范

    总结来说,这个压缩包为学习和掌握JNI提供了一套完整的资源,无论是初学者还是有经验的开发者,都能从中受益。通过阅读CHM文档和PDF资料,你将能深入了解JNI的概念、使用方法以及编程规范,从而在实际项目中更加...

    jni.h文件.7z

    总结来说,`jni.h`是JNI的核心,它定义了Java和本地代码之间交互的接口。`jni-test.cpp`是实现这些接口的本地代码示例。通过这两个文件,开发者可以构建Java程序与本地库的桥梁,实现高性能计算、利用现有C/C++库等...

    Android JNI 学习笔记

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

    jniDemo简单版

    总结一下,这个"jniDemo简单版"项目涵盖了以下知识点: 1. JNI接口的声明与使用。 2. Android NDK的简介及其在Java代码中加载本地库的方法。 3. C/C++本地方法的编写,包括JNI函数原型和`JNIEnv`指针的使用。 4. ...

    Android JNI 部分学习Demo

    总结起来,JNI是Android开发中一个不可或缺的工具,它使得Java代码能够充分利用本地代码的高性能和灵活性。掌握JNI不仅可以提升应用性能,还能更好地利用已有的C/C++库,为Android应用开发带来更大的便利。在这个...

    jni层内存泄漏检测工具

    总结来说,JNI层内存泄漏检测工具LeakTracer是Android开发中的一个强大工具,它可以帮助开发者有效地定位和解决JNI层的内存泄漏问题,提升应用的性能和可靠性。通过深入研究和实践,开发者可以更好地掌握JNI内存管理...

    Android--JNI-Device.zip_Android jni_android_jni_jni android

    9. **总结**:这个教程资料“Android--JNI-Device.zip”对于希望深入了解Android硬件驱动开发的开发者来说非常有价值,它将帮助开发者学习如何利用JNI高效地与设备驱动进行交互,提高应用程序的性能和功能。

Global site tag (gtag.js) - Google Analytics