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程序的示例。 JNI的核心在于创建本地方法接口,这些接口允许Java代码调用C/C++编写的函数,反之亦然。下面我们将深入探讨在...
在Ubuntu操作系统中,Java Native Interface (JNI) 是Java平台的标准接口,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都是必不可少的,比如访问操作系统特定功能、调用C/C++库或者提高程序性能等。...
在Java编程环境中,有时我们需要利用C++编写的高性能或特定功能的库,这时可以...通过学习和实践这个例子,你可以更深入地理解Java如何与C++库进行交互,这在处理底层操作、性能优化或者调用已有的C++库时非常有用。
在Java编程环境中,有时我们需要利用C或C++的高效性能来处理特定任务,这时我们可以借助Java Native Interface(JNI)...通过学习和理解这个例子,你将能够自如地在Java应用中集成本地代码,充分利用C/C++的性能优势。
本示例以"Java调用DLL例子"为主题,使用了JNative库作为接口来实现Java调用本地动态链接库。 JNative是一个开源的Java库,它提供了一种方法使得Java程序能够直接调用C/C++编写的函数,从而间接实现了调用DLL的功能...
本文档通过一个具体的例子——通过JNI调用驱动程序来控制LED灯的开关,详细介绍了如何编写JNI模块以及如何在Java应用中调用这些模块。本例由赖玉平(Peter Lai)提供,是学习JNI编程的良好起点。 #### 二、目标与前提...
以上五个文件分别展示了这些方法的实现细节,学习这些例子可以帮助开发者根据具体需求选择最合适的Java调用C的方法。在实际应用中,考虑到性能、可维护性和开发效率,需要权衡各种方法的优缺点。例如,JNI可能更适合...
在这个例子中,`javah -jni Prompt`会生成`Prompt.h`文件,这个文件包含了C/C++代码中需要的函数原型,如`JNIEXPORT jstring JNICALL Java_Prompt_getLine(JNIEnv *, jobject, jstring);` 3. **编写本地代码**: ...
Android JNI(Java Native Interface)是Android系统中用于连接Java层和C/C++原生代码的桥梁。本教程将深入解析Android JNI的编程过程,帮助开发者理解如何在Android环境下编译和使用JNI库。 首先,你需要一个编译...
JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。这篇教程将带你深入理解Android JNI的实际编译过程,适用于有一定开发经验的开发者。 首先,你需要一个编译环境...
《dnw for Linux(Ubuntu)在Java环境下的应用与实现》 在计算机领域,尤其是在Linux系统上进行开发时,有时我们需要使用特定的工具来完成特定的任务。本文将介绍如何在Ubuntu环境下使用dnw工具,这是一个专为Linux...
通过JNA,我们可以在不编写JNI代码的情况下访问本地库,从而简化了本地资源的访问过程。在这个例子中,我们将使用JNA来调用操作系统级别的API来设置窗口的透明度。 #### 三、代码解析 ##### 1. 导入必要的库 ```...
在LED控制的例子中,HAL层的接口可能包含打开和关闭LED的函数,这些函数被JNI调用并转发给相应的驱动程序。 驱动程序是操作系统和硬件之间的关键部分,它理解硬件的语言并翻译成操作系统可以理解的指令。对于LED灯...
RXTX的优势在于它的跨平台特性,通过JNI(Java Native Interface)技术,它能够调用不同操作系统下的本地库来实现串口通信,包括Linux、Mac OS X以及Windows等。这对于开发需要在多种环境下运行的串口通信应用非常...
在 Android 上,V4L2 可以通过 JNI(Java Native Interface)被 Java 层的应用程序调用,从而实现原生的视频捕获功能。 “pulse音频采集”则表示 FFmpeg 这个构建集成了 PulseAudio,这是一种跨平台的音频服务器...
在这个例子中,使用的是Ubuntu 7.02操作系统和arm-none-linux-gnueabi交叉编译器,该编译器允许你在非ARM架构的机器上构建适用于ARM设备的代码。确保已经安装了这个交叉编译器,并将其路径添加到环境变量中,以便...
**标题与描述解析** 标题提及的是"libevent对应...在实际开发中,开发者根据项目需求选择链接这些库中的一个或多个,并通过NDK的JNI(Java Native Interface)接口与Java代码交互,实现Android应用的原生性能优化。
开发者可以通过在Ubuntu环境下运行模拟器,并使用`adb shell`命令进入Android系统的shell,然后通过`cat /proc/kmsg`查看这些日志信息。 接下来,我们转向用户空间的程序开发。Android为用户空间的C/C++和Java代码...
学习者将从编写内核空间的驱动程序开始,逐步学习如何在硬件抽象层添加接口,如何在系统启动时提供硬件访问服务,以及如何通过JNI(Java本地接口)编写代码使得可以通过Java接口访问硬件。此外,还需要了解如何在...