Java使用Eclipse_cdt和MinGw编写C++/java,jni的小例子

  • Post author:
  • Post category:java


Java使用Eclipse_cdt和MinGw编写C++/java,jni的小例子

1.建立java工程。工程名为JniJava2.在工程里面建立包:com.cdc.jni,和文件夹jni.
2.在com.cdc.jni里面建立类Main.java.文件内容如下:
package com.cdc.jni;

public class Main {
	public static void main(String[] args) {
		Main main=new Main();
		
		int i=main.getInt();
		System.out.println("java打印:来自C++的数据="+i);
	}
	
	static{
		System.loadLibrary("libDll");
	}
	
	native int getInt();
}
3.在cmd里面进入到上述工程JniJava2里面的src目录下,执行命令:javah com.cdc.jni.Main,刷新JniJava2工程,可以看到这个工程下
出现了com_cdc_jni_Main.h文件。文件内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_cdc_jni_Main */

#ifndef _Included_com_cdc_jni_Main
#define _Included_com_cdc_jni_Main
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_cdc_jni_Main
 * Method:    getInt
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_cdc_jni_Main_getInt
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

将此文件复制到jni文件夹中(这一步可以不做)。
4.建立c++工程,工程名为Dll.建立一个文件夹为src,将上一步生成的com_cdc_jni_Main.h文件复制到src文件夹中,同时在src下面建立文件com_cdc_jni_Main.cpp文件,
文件内容如下:
#include"com_cdc_jni_Main.h"
JNIEXPORT jint JNICALL Java_com_cdc_jni_Main_getInt
  (JNIEnv *env, jobject obj){
	jint ret=5;


	return ret;

};
5.选中c++工程,按alt+enter,在Build----Settings----Tool Settings-----MinGW C++ Linker目录栏下的Miscellaneous选项下,
在linker flags处填入:-Wl,--add-stdcall-alias。
或者选中工程,右键properties,C/C++ Build/Settings/Tool Settings/MinGW C++ Linker/Miscellaneous,在右侧的Linker flags里面
输入-Wl,--add-stdcall-alias,确定。选中C++工程,点击工具栏上的Build 'Debug' for project 'Dll',点击后会在Dll工程下面
生成Binaries和Debug文件夹,在Debug文件夹下有libDll.dll文件。
6.将上一步中生成的libDll.dll文件复制到java工程JniJava2中的jni文件夹下。
7.选中java工程,右键依次点击run---run configurations---Main,在点击Arguments,在Vm arguments处填入如下:
-Djava.library.path="D:\android\JNI\JniJava2\jni;${env_var:PATH}"
其中,D:\android\JNI\JniJava2\jni表示放置libDll.dll文件的位置,其它是固定的,包括引号。
8.运行java程序。



前提:安装了相关环境,并将jdk里面的jni.h和jni_md.h拷贝到MinGW下的include路径下。



版权声明:本文为qyqingyan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。