1、eclipse 下 jni 初试2007-06-12 10:53JNI=java native interface, 为 java 应用程序提供调用本地方法的接口The standard Java class library may not support the platform-dependent features needed by your application.You may already have a library or application written in another programming language and you wish to make it ac
2、cessible to Java applications.You may want to implement a small portion of time-critical code in a lower-level programming language, such as assembly, and then have your Java application call these functions 步骤:1.编写带有 native 声明的方法的 java 类package jni;public class HelloWorld staticSystem.loadLibrary(“
3、hellodll“);public native void dispHelloWorld();/* param args*/public static void main(String args) / TODO Auto-generated method stub/System.out.println(“abc“);new HelloWorld().dispHelloWorld();2,保存后如果没有错误 eclipse 会编译产生 jni/HelloWorld.class3, 假设工程产生的 class 都在 classes 文件夹下(这个文件夹名字跟个人 eclipse 设置有关,也可能就
4、是工程根目录),那么控制台 cd 到 classes 用 javah 命令产生 h 文件,XXX/classesjavah -jni jni.HelloWorld(package 不要漏掉),产生的 jni_HelloWorld.h 文件如下/* DO NOT EDIT THIS FILE - it is machine generated */#include /* Header for class jni_HelloWorld */#ifndef _Included_jni_HelloWorld#define _Included_jni_HelloWorld#ifdef _cplusplu
5、sextern “C“ #endif/* Class: jni_HelloWorld* Method: dispHelloWorld* Signature: ()V*/JNIEXPORT void JNICALL Java_jni_HelloWorld_dispHelloWorld(JNIEnv *, jobject);#ifdef _cplusplus#endif#endif4, 写 cpp,实现 jni_HelloWorld.h 中的函数,这里请注意函数名,cpp 里的函数名跟 h 文件的函数名要一致,如果是从网上 copy 的一些例 子,函数名跟你例子的名字不一致虽然之后可以正确编译并产
6、生 dll,但是最终运行 java 程序链接的时候会出错,抛出 java.lang.UnsatisfiedLinkError 异常,本人就在此浪费了很长时间。jni_HelloWorldImp.cpp 内容如下:#include #include “jni_HelloWorld.h“#include JNIEXPORT void JNICALL Java_jni_HelloWorld_dispHelloWorld(JNIEnv *env, jobject obj)printf(“Hello world ! “);return;5,编译 cpp 产生 dll,在控制台下 cl -LD com_WNetAddConnection.cpp -FeIPCTestdll.dll以上命令的参数中,-I 表示编译包含的额外目录,-LD 表示产生 dll,-Fe 后面表示产生 dll 的名字,具体的参数可以自己用 cl -help 命令查看,cl 环境配置可以参考 用 vs 编译器 cl 在控制台下编译一文如果成功编译,会产生 hellodll.dll,hellodll.lib,hellodll.exp 三个文件,将 hellodll.dll 考到工程根目录下。6,运行 java 程序,输出 Hello world !