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

好了,java Test看结果吧。

最新文章

  1. Oracle学习笔记十二 子程序(存储过程、自定函数)和程序包
  2. UserSelector兼容
  3. IE浏览器的兼容模式代码细节解读
  4. .net上传图片并转成二进制流
  5. ACM2033
  6. JS幻灯片,循环播放,滚动导航,jQuery平滑旋转幻灯片
  7. PHP和MYSQL的编码问题
  8. 清除IE下链接虚线框
  9. 《JavaScript语言精髓与编程实践》读书笔记
  10. Java高新技术第一篇:类加载器详解
  11. Unity与web交互
  12. Vue components Cannot read property &#39;__ob__&#39; of undefined
  13. 仓位管理 V4.3
  14. Google 宣布在 4 月 1 日关闭站内搜索
  15. SFTP客户端代码示例
  16. Visual Studio Code用户设置文件
  17. JSONResult引用某博客
  18. iOS设计模式 - 桥接
  19. 【[JSOI2009]火星藏宝图】
  20. [NOIP2017]时间复杂度

热门文章

  1. 记PHP使用rtrim()导致获得的数据乱码问题
  2. 51nod1326 遥远的旅途(spfa+dp)
  3. CSS-定义样式表
  4. numpy小结(一)
  5. [十二省联考2019] 异或粽子 - 可持久化Trie,堆
  6. C++——指针2-指向数组的指针和指针数组
  7. Hog实例
  8. 跨站点脚本攻击XSS
  9. go语言 内置的椭圆数字签名及其验证算法
  10. Linux下基于PAM机制的USB Key的制作