Eclipse中CDT+MinGW实现Java调用C++
前期准备
首先,在eclipse中安装CDT插件,C/C++环境MinGW(配置好环境变量)。
Java端编写类文件,以及C++头文件的生成
1、建立Java项目MyTest,编写Helloworld类
package com.mytest;
publicclassHelloWorld {
//加载C++动态连接库
static {
System.loadLibrary("HelloWorld");
}
//定义native修饰的方法,具体用C++实现
publicnativestaticvoidsayHello();
publicstaticvoidmain(String[] args) {
sayHello();
}
}
2、在dos下生成C++头文件
进入到Java项目MyTest HelloWorld类所在的bin目录,我的目录在:
D:\ProgramFiles\eclipse-workspace\MyTest\bin
用javah命令生成C++头文件(定位到HelloWorld的class文件,使用完全限定名:包名.类名):
javah -jnicom.mytest.HelloWorld
在bin目录下生成com_mytest_HelloWorld.h头文件
下面就是在eclipse中编写C++,以及dll文件的生成
3、建立C++项目MyCppTest,编写C++文件HelloWorld.cpp
//导入头文件
#include"jni.h"
//#include "jni_md.h"
#include<iostream>
#include"com_mytest_HelloWorld.h"
usingnamespacestd;
//具体实现sayHello()方法
JNIEXPORT void JNICALL Java_com_mytest_HelloWorld_sayHello(JNIEnv *env, jclass cla){
cout<<"hello world"<<endl;
}
"jni.h"和"jni_md.h"这两个文件,分别在jdk安装目录下的include和include/win32下,需要将它们拷贝到mingw安装目录下的include目录里面
4、将上面生成的头文件拷贝到HelloWorld.cpp同一目录下
5、编译配置
选中C++项目MyCppTest,右击,选择properties。第一步配置你的编译器连接,配置如下
然后就是,你生成的dll属性配置
Command中填写g++
接着在MinGW C++ Linker下的Miscellaneous中,Linker flags中填写:
-Wl,--add-stdcall-alias-static-libgcc -static-libstdc++ -shared
在MinGW C++ Linker下的Shared Library Settings中,勾选右侧的Shared选项
配置好后,编译生成dll文件 HelloWorld.dll(必须安装相同位数的eclipse和mingw版本,生成的dll文件必须和eclipse的位数相同)
Java通过dll调用C++
6、将dll文件HelloWorld拷贝到Java项目MyTest的类HelloWorld同一目录下,
右键Java项目MyTest,build path
7、最后,运行Java程序成功