jni 调用 例子
来源:互联网 发布:如何辨别网络谣言 编辑:程序博客网 时间:2024/06/05 15:53
JNI允许程序员编写的本地方法处理的情况下,当一个应用程序不能完全在Java编程语言编写的,例如当标准Java类库不支持平台特定的功能或程序库。它也用来修改在另一种编程语言编写的应用程序中的一个现有的应用程序,以访问爪哇应用程序。许多标准库的类依赖于JNI的开发者和用户提供的功能,例如文件I / O和声音功能。包括性能和平台敏感的标准库中的实现,允许所有的应用程序访问此功能的安全和平台无关的方式。
JNI框架让本地方法使用Java对象,Java代码中使用这些对象相同的方式。本地方法可以创建对象,然后检查和使用这些对象来执行它的任务。本地方法也可以检查和使用由爪哇应用程序代码创建的对象。
JNI框架让本地方法使用Java对象,Java代码中使用这些对象相同的方式。本地方法可以创建对象,然后检查和使用这些对象来执行它的任务。本地方法也可以检查和使用由爪哇应用程序代码创建的对象。
JNI是有时被称为“逃生舱”为Java开发者因为它使他们对Java应用程序,Java标准API无法提供添加功能。它可以用来与其他语言编写的代码进行接口,如。它也可以用于实时计算或操作,喜欢解决复杂的数学方程,因为问题的本地代码有些课程可能比Java虚拟机代码运行得更快
Examples
HelloWorld
make.sh
#!/bin/sh# Linux 2.6.32-358.el6.x86_64# gcc 4.4.7# openjdk 1.7.0export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.javac HelloWorld.javajavah HelloWorldgcc -shared -fPIC libHelloWorld.c -o libHelloWorld.sojava HelloWorld
build.bat
:: Microsoft Visual Studio 2012 Visual C++ compilerSET VC="C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC":: Microsoft Windows SDK for Windows 7 and .NET Framework 4 SET MSDK="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A":: Java 1.7.0 update 21SET JAVA_HOME="C:\Program Files (x86)\Java\jdk1.7.0_21":: Add compiler tools folder to the PATH variable. Do not run this too many times or the PATH will exceed the maximum limit.call %VC%\vcvarsall.batjavac HelloWorld.javajavah HelloWorld:: On Windows, the JNI library should not have a "lib" prefix%VC%\bin\cl /I%JAVA_HOME%\include /I%JAVA_HOME%\include\win32 /I%VC%\include /I%VC%\lib /I%MSDK%\Lib libHelloWorld.c /FeHelloWorld.dll /LDjava HelloWorld
HelloWorld.java
class HelloWorld{private native void print();public static void main(String[] args){new HelloWorld().print();}static{System.loadLibrary("HelloWorld");}}
HelloWorld.h
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class HelloWorld */#ifndef _Included_HelloWorld#define _Included_HelloWorld#ifdef __cplusplusextern "C" {#endif/* * Class: HelloWorld * Method: print * Signature: ()V */JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif
libHelloWorld.c
#include <stdio.h> #include "HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj) { printf("Hello World!\n"); return; }
Invocation:
$ chmod +x make.sh$ ./make.sh
参考网址:
https://en.wikipedia.org/wiki/Java_Native_Interface
最后补充其mak 文件的改动
#!/bin/sh
# Linux 2.6.32-358.el6.x86_64
# gcc 4.4.7
# openjdk 1.7.0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
javac HelloWorld.java
javah HelloWorld
gcc -shared -fPIC libHelloWorld.c -I ./ -I /usr/java/jdk1.7.0_67/include/ -I /usr/java/jdk1.7.0_67/include/linux -o libHelloWorld.so
java HelloWorld
(注意:这里的-I是导入头文件的搜索路径,这里主要是为搜索TestJNI.h中的jni.h。不同的系统路径可能不同,可通过locate jni.h查)
0 0
- jni 调用 例子
- Linux下jni 调用 小例子
- jni例子
- JNI例子
- JNI 简单例子小结 (调用外部DLL)
- Linux平台使用JNI的例子 Java调用so
- Linux平台使用JNI的例子 Java调用so
- Linux平台使用JNI的例子 Java调用so
- Linux平台Java调用so库-JNI使用例子
- 自己能默写的最简单的JNI调用例子
- jni使用--java native 调用c++ boost regex库例子
- Linux平台Java调用so库-JNI使用例子
- Java利用JNI调用c++代码简易例子演示
- scala和java通过JNI调用C++程序例子
- Linux平台Java调用so库-JNI使用例子
- Linux平台Java调用so库-JNI使用例子
- Linux平台Java调用so库-JNI使用例子
- Linux平台Java调用so库-JNI使用例子
- php数组
- HDU 1078 FatMouse and Cheese
- 怎样通过PDF Transformer+复制PDF文档中的内容
- css学习笔记之三
- 【CodeVS1101】【NOIP2002】矩形覆盖
- jni 调用 例子
- dataTables国际化
- OM模块功能&API详解
- 设计模式沉思录——互动出版网
- NJUPT JAVA语言 小应用程序Applet设计
- [资料]学习必备嵌入式开发板-4412开发板ARM+Android+linux技术全覆盖
- Spring 学习笔记(二)——装配 bean
- adb shell dumpsys 命令 查看内存
- Java 获得纯数字格式的时间