参考链接:http://www.inonit.com/cygwin/jni/helloWorld/c.html
step 1: 编写HelloWorld.java
class HelloWorld{ native void printhello(); native void printstring(String str); static{System.loadLibrary("HelloWorld");} public static void main(String args[]){ HelloWorld mHelloWorld= new HelloWorld(); mHelloWorld.printhello(); mHelloWorld.printstring("hello world form printstring func"); } }
step 2: 编译javac 生成 HelloWorld.class文件
javac HelloWorld.java
step 3: 使用javah 生 native 头文件(HelloWorld.h)
javah HelloWorld
step 4: 编辑HelloWorld.c
#include "HelloWorld.h" #include <stdio.h> /* * Class: helloJNI * Method: printhello * Signature: ()V */ JNIEXPORT void JNICALL Java_HelloWorld_printhello (JNIEnv *env, jobject object){ printf("hello world!\r\n"); return; } /* * Class: helloJNI * Method: printstring * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_HelloWorld_printstring (JNIEnv *env, jobject object, jstring string){ const char *str = (*env)->GetStringUTFChars(env, string, 0); printf("%s!\n", str); return; }
step 5: 生成动态链接库HelloWorld.dll
gcc -mno-cygwin -I$jdk/include -I$jdk/include/win32 -Wl,--add-stdcall-alias -shared -o HelloWorld.dll HelloWorld.c
step 6: 运行 java HelloWorld (注意, java 指令必须是32bit jdk下的)