一个jni例子
来源:互联网 发布:ps制作淘宝店招教程 编辑:程序博客网 时间:2024/06/05 23:41
步骤 1:编写 Java 代码
public class Sample1 {
public native int intArrayMethod(int[] intArray);
}
步骤 2:编译 Java 代码
接下来,我们需要将 Java 代码编译成字节码。完成这一步的方法之一是使用随 SDK 一起提供的 Java 编译器javac。用来将 Java 代码编译成字节码的命令是:
C:\eclipse\workspace\IBMJNI\src\com\ibm\course\jni>javac Sample1.java
步骤 3:创建 C/C++ 头文件
第三步是创建 C/C++ 头文件,它定义本机函数说明。完成这一步的方法之一是使用 javah.exe,它是随 SDK 一起提供的本机方法 C 存根生成器工具。这个工具被设计成用来创建头文件,该头文件为在 Java 源代码文件中所找到的每个 native 方法定义 C 风格的函数。这里使用的命令是:
C:\eclipse\workspace\IBMJNI\bin>javah –classpath ./ –jni com.ibm.course.jni.Sample1
步骤 4:编写 C/C++ 代码
当谈到编写 C/C++ 函数实现时,有一点需要牢记:说明必须和 Sample1.h 的函数声明完全一样。我们将研究用于 C实现和 C++ 实现的完整代码,然后讨论两者之间的差异。
C函数实现
以下是 Sample1.c,它是用 C 编写的实现:
#include
}
JNIEXPORT jstring JNICALL Java_com_ibm_course_jni_Sample1_stringMethod
}
JNIEXPORT jint JNICALL Java_com_ibm_course_jni_Sample1_intArrayMethod
}
C++ 函数实现
以下是 Sample1.cpp(C++ 实现)
#include "com_ibm_course_jni_Sample1.h"
#include
JNIEXPORT jint JNICALL Java_Sample1_intMethod
}
JNIEXPORT jboolean JNICALL Java_Sample1_booleanMethod
}
JNIEXPORT jstring JNICALL Java_Sample1_stringMethod
}
JNIEXPORT jint JNICALL Java_Sample1_intArrayMethod
}
C 和 C++ 函数实现的比较
唯一的差异在于用来访问 JNI 函数的方法。在 C 中,JNI 函数调用由“(*env)->”作前缀,目的是为了取出函数指针所引用的值。在 C++ 中,JNIEnv 类拥有处理函数指针查找的内联成员函数。下面将说明这个细微的差异,其中,这两行代码访问同一函数,但每种语言都有各自的语法。
C 语法:jsize len = (*env)->GetArrayLength(env,array);
C++ 语法:jsize len =env->GetArrayLength(array);
步骤 5:创建共享库文件
接下来,我们创建包含本机代码的共享库文件。大多数 C 和 C++ 编译器除了可以创建机器代码可执行文件以外,也可以创建共享库文件。用来创建共享库文件的命令取决于您使用的编译器。下面是在 Windows 和 Solaris 系统上执行的命令。
Windows:cl -Ic:\jdk\include -Ic:\jdk\include\win32 -LD Sample1.c -FeSample1.dll
Solaris:cc -G -I/usr/local/jdk/include -I/user/local/jdk/include/solaris Sample1.c -o Sample1.so
步骤 6:运行 Java 程序
最后一步是运行 Java 程序,并确保代码正确工作。因为必须在 Java 虚拟机中执行所有 Java 代码,所以需要使用Java 运行时环境。完成这一步的方法之一是使用 java,它是随 SDK 一起提供的 Java 解释器。所使用的命令是:
java com.ibm.course.jni.Sample1
- 一个jni例子
- 一个JNI的小例子
- Ubuntu下第一个Jni例子
- 一个例子掌握JNI开发
- 关于JNI技术的一个小例子
- JNI开发环境搭建及第一个JNI小例子
- jni例子
- JNI例子
- 一个简单的例子带你了解jni流程
- Android Studio 一个简单的非传统Jni例子
- JNI 简单例子
- java jni 例子
- JNI入门小例子
- Android Jni 例子,ndk
- JAVA JNI 例子 详解
- JAVA JNI例子
- java jni helloworld 例子
- Android JNI使用例子
- wcf学习--建立最简单的WCF服务
- Web测试
- bzoj2127
- linux命令之SVN操作
- Myacm Triangles
- 一个jni例子
- [C++11 并发编程] 03 - 向线程传递参数
- 各种资源链接
- 中缀表达式求值
- Oracle SQL性能优化
- 一次完整的HTTP请求所经历的7个步骤
- linux命令之文件级的操作
- Avoid The Lakes (深搜dfs)
- 远程连接添加 3389