• 【转载】在windows下使用gcc编译jni的简单教程


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

    1、安装MinGW,这个可以为windows提供gcc编译环境。

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

    2、编写JAVA文件。

    写个最简单的:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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

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

    1
    2
    3
    4
    5
    6
    7
    #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 ",a);
    }

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

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

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

    命令:

    gcc -I%JAVA_HOME%include -I%JAVA_HOME%includewin32 -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  防止编译后的函数名被自动加上@符号,并取消警告。(是小写字母L,不是数字1)

    好了,java Test看结果吧。

  • 相关阅读:
    kettle表输入条件参数设置
    batの磕磕碰碰
    bat调用kettle的job文件
    数组转换成字符串输出
    bat调用带参数存储过程
    读取属性文件
    剑指Offer——删除链表中重复的结点
    剑指Offer——链表中环的入口节点
    剑指Offer——两个链表的第一个公共节点
    剑指Offer——表示数值的字符串
  • 原文地址:https://www.cnblogs.com/YangtzeYu/p/6226255.html
Copyright © 2020-2023  润新知