Eclipse直接完成JAVA调用C/C++ (Eclipse下使用CDT结合MinGW)
网上都有很多在
windows平台下JAVA调用C/C++方法的介绍说明。但是,在此过程中,绝大多数都是利用VC等其他工具来进行DLL的生成。试想一下,在
eclipse平台开发了JAVA,突然又要打开VC的工作环境,多不爽!何况如果内存不够的话,还得先把其中一个退出。到需要再重新打开,多费劲啊!!
现在,我们让这一系列的工作都在eclipse上完成! 首先、安装eclipse3.2。 这个安装过程我就不在这里介绍了,大家都懂。 第二、安装MinGW。 1.用户可以直接登陆以下地址下载MinGW http://prdownloads.sourceforge.net/mingw/MinGW-5.0.3.exe
2. 鼠标双击执行安装文件,选择“
Download and Install
”,下一步
3.选择软件安装的版本,这里我们选择“
Candidate
”,下一步
4.选择安装的编译器
1) g++ compiler
2) g77 compiler
3) Objective C Compiler
4) MinGW Make
下一步
5. 选择安装路径,下一步
这里用默认路径C:\MinGW
6. 等待下载软件版本及安装。安装会自动完成,但是你要保证你的网络是可用的。
第三、MinGW的环境变量设置 1. 系统变量里面的
Path
添加“
MinGW
安装目录
\bin;
”
(
例如
;C:\MinGW\bin;)
2. 系统变量里添加
C_INCLUDE_PATH,值为:C:\MinGW\include 3. 系统变量里添加
CPLUS_INCLUDE_PATH,值为:C:\MinGW\include\c++\3.4.2;C:\MinGW\include\c++
\3.4.2\mingw32;C:\MinGW\include\c++\3.4.2\backward;C:\MinGW\include
(这里要注意你的版本号哦) 第四、做一个小技巧修改 先将
MinGW
安装目录
\bin
底下的
mingw32-make.exe复制一份副本,将副本
更名为
make.exe (因为eclipse默认用了make,不是mingw32-make,当然,你也可以修改eclipse的设定,自己喜欢吧)。
第五、安装CDT插件。
1、 到
Eclipse
的网站上面找到
CDT
插件的压缩包,然后下载至电脑硬盘上;
下载地址:
(http://www.eclipse.org/cdt/downloads.php
)
2、就像你安装其他安装插件一下的方式安装CDT插件吧。怎么安装不是关键问题,按你喜欢,能用就可以了。
第六、简单介绍CDT的使用吧。 1. 新建一个
C++
项目
点击菜单栏上的
File / New / Standard Make C++ Project
如果想建立一个
C
项目则选择
Standard Make C Project;
2. 输入
New Project
名字,直接按
Finish
完成
Project
添加
3. 给项目新建一个的源文件,点击菜单栏上的
File / New / File
4. 接着出现文件添加的窗口,在
File Name
栏里面写上文件名
C++
的源文件后缀名为
cpp
如
hello.cpp
而
C
的源文件后缀名为
c
如
hello.c
5. 编辑刚刚添加的
hello.cpp
文件,添加一段
C++
的代码,内容如下:
若你新建的项目为
C
的话,则需添加相应的
C
代码,内容如下:
添加一个编译命令
Target Name:MAKE FILE
Builder Command:g++ hello.cpp -g -o run
这里如果是
c
环境就改成
gcc hello.c -g -o run
双击
MAKE FILE
,此时
Eclipse
在项目文件的根目录创建一个
run.exe
的文件,此文件根据
hello.cpp
代码编译生成。
双击
run.exe
可以预览效果,控制台输出结果:Hello world!
第七、让我们开始进入真正的工作吧!
// Hello.class
,这里主要包名,因为后面的函数命名同包名也有联系的。
在
bin
目录下建立批处理文件,名称随意,用
bat
作为扩展名就行了。这里命名为
run.bat
内容为:
保存,执行(可以双击执行,也可在eclipse的“Run As”调用bat批处理文件来执行),则在
bin
目录下生成
test_Hello.h
文件。内容为:
1
)
将生成的头文件
test_Hello.h
拷贝到
C
工程
Cpro
下
2
)
编写
C
类
Hello.c
,内容为:
3
)
在
C
工程
Cpro
下建立
hello.def
文件(用于定义导出的函数),内容为:
4
)在
C
工程
Cpro
下建立
makefile
文件,内容为:
5)
再
Make Targets
视图下,为
Cpro
工程添加两个
Make Target
(对应
makefile
文件的内容),如下图:
6
)
Make Targets
视图下双击
step1
,在
C
工程
Cpro
下
生成
hello.o
文件。
7)
Make Targets
视图下双击
step1
,在
C
工程
Cpro
下
生成
hello.dll
文件。
1.
将
hello.dll
拷贝到
Java
工程
JavaHello
下。
2.
运行
Hello.java
,则可以看到输出结果:
Hello world!
1
)
将
Hello.c
改为
Hello.cpp
2
)
将
makefile
内容改为:
#include
<
iostream
>
using
namespace
std;
int
main()
{
cout
<<
"
hello world!!\n
"
;
return
1
;
}
#include
"
stdio.h
"
int
main()
{
printf(
"
Hello world!\n
"
);
return
1
;
}
The Java side
1
.建立
Java
工程
JavaHello
,编写
java
类
package
test;
class
Hello
{
public
native
void
sayHello();
static
{
System.loadLibrary(
"
hello
"
);
}
public
static
void
main(String[] args)
{
Hello h
=
new
Hello();
h.sayHello();
}
}
2.用命令生成头文件
set java_home
=
F:\dev
-
software\dev
-
soft\jdk\jdk1.
5.0
set path
=%
java_home
%
\bin
set class_path
=%
java_home
%
\lib;
%
java_home
%
\lib\dt.jar;
%
java_home
%
\lib\tools.jar
javah
-
jni test.Hello
@pause
/*
DO NOT EDIT THIS FILE - it is machine generated
*/
#include
<
jni.h
>
/*
Header for class test_Hello
*/
#ifndef _Included_test_Hello
#define
_Included_test_Hello
#ifdef __cplusplus
extern
"
C
"
{
#endif
/*
* Class: test_Hello
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT
void
JNICALL Java_test_Hello_sayHello
(JNIEnv
*
, jobject);
#ifdef __cplusplus
}
#endif
#endif
The C side
-
Compiling the Library
1.
建立标准
C
工程
Cpro
,并生成
dll
文件
#include
<
jni.h
>
#include
"
test_Hello.h
"
#include
<
stdio.h
>
JNIEXPORT
void
JNICALL Java_test_Hello_sayHello
(JNIEnv
*
env, jobject obj)
{
printf(
"
Hello world !\n
"
);
return
;
}
EXPORTS
Java_test_Hello_sayHello
step1:
gcc
-
c
-
I
"
F:\dev-software\dev-soft\jdk\jdk1.5.0\include
"
-
I
"
F:\dev-software\dev-soft\jdk\jdk1.5.0\include\win32
"
-
o hello.o Hello.c
step2:
gcc
-
shared
-
o hello.dll hello.o hello.def
JAVA
调用
DLL
注:如果上面不是
C
工程而是是
C++
工程
step1:
g
++
-
c
-
I
"
F:\dev-software\dev-soft\jdk\jdk1.5.0\include
"
-
I
"
F:\dev-software\dev-soft\jdk\jdk1.5.0\include\win32
"
-
o hello.o Hello.cpp
step2:
g
++
-
shared
-
o hello.dll hello.o hello.def