您的位置:首页 > 编程语言 > C语言/C++

【转载整理】eclipse 开发c/c++、Java使用JNI调用C程序、生成64位dll动态链接库

2017-11-24 09:32 1156 查看

一、eclipse安装CDT组件



二、安装windows环境下的C/C++编译器MinGW

https://pan.baidu.com/s/1kVP65Jx(适用于windows 32/64系统、若从事C/C++,请重新下载安装!该MinGW只能生成64位的dll,解压,配置系统环境变量即可)

环境变量:

D:\mingw\bin;

D:\mingw\libexec\gcc\x86_64-w64-mingw32\4.9.2;

三、建一个C项目,开始配置

配置编译器MinGW连接



配置生成的dll属性













点击OK!!!

项目Build工程,即可生成dll。

四、Java使用JNI调用C程序

JNI原理



开始使用JNI

package kg.tom;

public class MyJni {
//使用JNI的关键字native
//这个关键字决定我们那些方法能在我们的C文件中使用
//只须声明,不必实现
public native void display();
public native double sum(double x,double y);

//这个是到时候调用我们写好的C文件
//现在用不上
//static {
//  System.loadLibrary("sum");
//}

public static void main(String[] args) {
//到时候测试用方法现在用不上
//new MyJni().display();
//System.out.println(new MyJni().sum(2.0, 3.0));
}
}


使用cmd

类转换成.class文件



把.class文件转换成头文件,成功的话就会在src目录下看到.h文件了



打开生成的.h文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class kg_tom_MyJni */

#ifndef _Included_kg_tom_MyJni
#define _Included_kg_tom_MyJni
#ifdef __cplusplus
extern "C" {
#endif
/*
- Class:     kg_tom_MyJni
- Method:    display
- Signature: ()V
*/
JNIEXPORT void JNICALL Java_kg_tom_MyJni_display
(JNIEnv *, jobject);

/*
- Class:     kg_tom_MyJni
- Method:    sum
- Signature: (DD)D
*/
JNIEXPORT jdouble JNICALL Java_kg_tom_MyJni_sum
(JNIEnv *, jobject, jdouble, jdouble);

#ifdef __cplusplus
}
#endif
#endif


native方法名称转换详解:



C文件

//必须的头文件jni.h
#include <jni.h>
//导入我们需要实现的本地方法
#include "kg_tom_MyJni.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_kg_tom_MyJni_display
(JNIEnv *env, jobject obj)
{
printf("Hello World tom!!");
return;
}

JNIEXPORT jdouble JNICALL Java_kg_tom_MyJni_sum
(JNIEnv *env, jobject obj, jdouble a, jdouble b)
{
return a + b;
}


用eclipse把编译好的dll放到项目根目录,注意不是代码根目录

JNI映射的数据类型





声明:以上内容是本人搜集的资料,后经测试可用,特整理以待备用。

参考:

https://www.cnblogs.com/youxilua/archive/2011/09/16/2178554.html

http://blog.csdn.net/csdncqmyg/article/details/53170548

http://www.360doc.com/content/17/1009/15/33093582_693492128.shtml
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  eclipse c语言 jni java