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