`

Java JNI例子(ubuntu)

 
阅读更多

1、创建HelloWorld.java

class HelloWorld {

    public native void sayHello();

    static {
        System.loadLibrary("HelloWorld");
    }

    public static void main(String[] args) {
        (new HelloWorld()).sayHello();
    }
}

 2、编译生成HelloWorld.class

root@meie:~/Desktop#javac HelloWorld.java

 3、编译生成HelloWorld.h

root@meie:~/Desktop#javah HelloWorld

4、编译生成libHelloWorld.so(注意jdk参数指向)

root@meie:~/Desktop# gcc -shared -I /usr/lib/jvm/java-6-sun/include/ -I /usr/lib/jvm/java-6-sun/include/linux/ -I /usr/in
clude/ HelloWorld.c -o libHelloWorld.so
 

5、创建HelloWorld.c文件

#include "jni.h"
#include "HelloWorld.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_HelloWorld_sayHello (JNIEnv *env, jobject obj) {
    printf("Hello,the World!!!");
}

6、测试代码,成功

java -Djava.library.path=.  HelloWorld

 注意:直接用 java HelloWorld会报错

root@meie:~/Desktop# java HelloWorld
Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloWorld in java.library.path
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734)
	at java.lang.Runtime.loadLibrary0(Runtime.java:823)
	at java.lang.System.loadLibrary(System.java:1028)
	at HelloWorld.<clinit>(HelloWorld.java:6)
Could not find the main class: HelloWorld.  Program will exit.

 这时java文件中loadlib时找不到这个so导致的,我们这样来运行:"java -Djava.library.path=.  HelloWorld",通过设置java.library.path来找到这个so。

分享到:
评论

相关推荐

    ubuntu上面使用jni例子

    这个"ubuntu上面使用jni例子"的压缩包很可能是提供了一个在Ubuntu环境下开发和运行JNI程序的示例。 JNI的核心在于创建本地方法接口,这些接口允许Java代码调用C/C++编写的函数,反之亦然。下面我们将深入探讨在...

    ubuntu下第一个Jni例子

    在Ubuntu操作系统中,Java Native Interface (JNI) 是Java平台的标准接口,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都是必不可少的,比如访问操作系统特定功能、调用C/C++库或者提高程序性能等。...

    java调用C++编写的动态库dll

    在Java编程环境中,有时我们需要利用C++编写的高性能或特定功能的库,这时可以...通过学习和实践这个例子,你可以更深入地理解Java如何与C++库进行交互,这在处理底层操作、性能优化或者调用已有的C++库时非常有用。

    jni_example:springboot环境下java调用c程序生成动态链接库(.so文件),并调用(基于JNI,Ubuntu)

    在Java编程环境中,有时我们需要利用C或C++的高效性能来处理特定任务,这时我们可以借助Java Native Interface(JNI)...通过学习和理解这个例子,你将能够自如地在Java应用中集成本地代码,充分利用C/C++的性能优势。

    Java调用DLL例子

    本示例以"Java调用DLL例子"为主题,使用了JNative库作为接口来实现Java调用本地动态链接库。 JNative是一个开源的Java库,它提供了一种方法使得Java程序能够直接调用C/C++编写的函数,从而间接实现了调用DLL的功能...

    Android通过JNI调用驱动程序(例子).pdf

    本文档通过一个具体的例子——通过JNI调用驱动程序来控制LED灯的开关,详细介绍了如何编写JNI模块以及如何在Java应用中调用这些模块。本例由赖玉平(Peter Lai)提供,是学习JNI编程的良好起点。 #### 二、目标与前提...

    linux 系统 java 调C 例子

    以上五个文件分别展示了这些方法的实现细节,学习这些例子可以帮助开发者根据具体需求选择最合适的Java调用C的方法。在实际应用中,考虑到性能、可维护性和开发效率,需要权衡各种方法的优缺点。例如,JNI可能更适合...

    Ubuntu 使用Jni开发实例详解

    在这个例子中,`javah -jni Prompt`会生成`Prompt.h`文件,这个文件包含了C/C++代码中需要的函数原型,如`JNIEXPORT jstring JNICALL Java_Prompt_getLine(JNIEnv *, jobject, jstring);` 3. **编写本地代码**: ...

    android-jni真实编译过程演示教学-adthree借鉴.pdf

    Android JNI(Java Native Interface)是Android系统中用于连接Java层和C/C++原生代码的桥梁。本教程将深入解析Android JNI的编程过程,帮助开发者理解如何在Android环境下编译和使用JNI库。 首先,你需要一个编译...

    android-jni真实编译过程演示教学-adthree扫描.pdf

    JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。这篇教程将带你深入理解Android JNI的实际编译过程,适用于有一定开发经验的开发者。 首先,你需要一个编译环境...

    dnwforlinux(ubuntu)绝对能用的.pdf

    《dnw for Linux(Ubuntu)在Java环境下的应用与实现》 在计算机领域,尤其是在Linux系统上进行开发时,有时我们需要使用特定的工具来完成特定的任务。本文将介绍如何在Ubuntu环境下使用dnw工具,这是一个专为Linux...

    java jframe透明代码

    通过JNA,我们可以在不编写JNI代码的情况下访问本地库,从而简化了本地资源的访问过程。在这个例子中,我们将使用JNA来调用操作系统级别的API来设置窗口的透明度。 #### 三、代码解析 ##### 1. 导入必要的库 ```...

    点亮一个led 灯的实验

    在LED控制的例子中,HAL层的接口可能包含打开和关闭LED的函数,这些函数被JNI调用并转发给相应的驱动程序。 驱动程序是操作系统和硬件之间的关键部分,它理解硬件的语言并翻译成操作系统可以理解的指令。对于LED灯...

    rxtx-2.2-20081207-win-x64 rxtx_RXTXcomm_

    RXTX的优势在于它的跨平台特性,通过JNI(Java Native Interface)技术,它能够调用不同操作系统下的本地库来实现串口通信,包括Linux、Mac OS X以及Windows等。这对于开发需要在多种环境下运行的串口通信应用非常...

    ffmpeg6.0 android 编译库

    在 Android 上,V4L2 可以通过 JNI(Java Native Interface)被 Java 层的应用程序调用,从而实现原生的视频捕获功能。 “pulse音频采集”则表示 FFmpeg 这个构建集成了 PulseAudio,这是一种跨平台的音频服务器...

    android 完整的导jpeg库方法

    在这个例子中,使用的是Ubuntu 7.02操作系统和arm-none-linux-gnueabi交叉编译器,该编译器允许你在非ARM架构的机器上构建适用于ARM设备的代码。确保已经安装了这个交叉编译器,并将其路径添加到环境变量中,以便...

    libevent对应Android下的库文件

    **标题与描述解析** 标题提及的是"libevent对应...在实际开发中,开发者根据项目需求选择链接这些库中的一个或多个,并通过NDK的JNI(Java Native Interface)接口与Java代码交互,实现Android应用的原生性能优化。

    Android 实现自己的LOG信息

    开发者可以通过在Ubuntu环境下运行模拟器,并使用`adb shell`命令进入Android系统的shell,然后通过`cat /proc/kmsg`查看这些日志信息。 接下来,我们转向用户空间的程序开发。Android为用户空间的C/C++和Java代码...

    android设备驱动步骤实例------重要0

    学习者将从编写内核空间的驱动程序开始,逐步学习如何在硬件抽象层添加接口,如何在系统启动时提供硬件访问服务,以及如何通过JNI(Java本地接口)编写代码使得可以通过Java接口访问硬件。此外,还需要了解如何在...

Global site tag (gtag.js) - Google Analytics