日期:2014-05-17  浏览次数:20972 次

在windows下使用gcc编译jni的简单教程
1、安装MinGW,这个可以为windows提供gcc编译环境。

到http://sourceforge.net/projects/mingw/files/ 下载,是.exe的,在线安装,但很快。安装时选c compiler就行了,也可以把c++的也装了。安装完成后,为了方便使用最好配置一下环境变量。把MinGW/bin目录加入环境变量。



2、编写JAVA文件。

写个最简单的:

public class Test 
{
     static
     {
         System.loadLibrary("lib");   
     }     

     static native void print(int a);    

     public static void main (String args[]) 
     {
        print(3);   
     } 
} 

然后编译java文件 javac Test.java


3、生成.h头文件。

javah Test

就这一个简单的命令就行了。(如果有包名,需要类似javah com.google.Test这样,注意命令行目录)



4、实现.c文件。

.h生成后可以打开看一下,里面有个方法是需要自己实现的。如下:

JNIEXPORT void JNICALL Java_Test_print
(JNIEnv *, jclass, jint);

这个就是我们java里写的print方法了。

这里简单说一下c的方法名命名规则是Java_packagename_Classname_method

要实现的就是这个方法了。

#include <stdio.h> 
#include <jni.h> 
#include "Test.h"
   JNIEXPORT void JNICALL Java_Test_print(JNIEnv *env, jclass jthiz,jint a)
   {
      printf("Hello JNI!%d\n",a); 
   } 

这里简单说一下,include的第一个是c的标准输入输出库,第2个是jni库,这个文件是在java/include里的,第3个就是自己刚才生成的头文件了,注意一定要用“”,不是用<>

方法的前2个参数是固定的,不用管。



5、把.c文件编译成.dll

命令:

gcc -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 -shared -Wl,–kill-at -s -o lib.dll Test.c



解释一下:

-I(大写字母I,include的意思)是加入自己的库,也就是告诉编译器jni.h的位置。当然不加这个参数也可以,自己把jni.h和jni_md.h文件复制出来和Test.c放一起,另外include改为”"

-shared表示编译成.dll库文件

-s参数可以大幅减小.dll文件的大小,不加也可以

-o表示目标文件名,不加也可以,会有默认名,但要自己改成java中导入库的名字,这里是lib

-Wl,–kill-at  这个参数我也不明白,反正要加,不加能编译成.dll,但java中会报错。(是小写字母L,不是数字1)



好了,java Test看结果吧。

Tags: gcc, java, jni, mingw, 教程

Categories: Java


转自:http://veikr.com/201207/windows_gcc_jni.html