java调用C函数

参考链接: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下的)

 

posted @ 2017-08-17 14:17  不在+年华  阅读(442)  评论(0)    收藏  举报