java调用dll或so动态库文件(c++/c)开发平台:Eclipse3.6.1.1+CDT(cdt-master-7.0.0)+MinGW(MinGW-5.0.2)
一:在Eclipse中搭建开发C/C++的环境
1:下载并安装cdt :http://www.eclipse.org/cdt/downloads.php :选择自己eclipse 支持的cdt插件,下载,并且
通过eclipse-->help-->install new software安装cdt
二:下载并安装MinGW
1: 下载地址:http://sourceforge.net/project/showfiles.php?group_id=2435
下载并安装 (在线安装的 有点慢!)
2:配置环境变量 (我将MinGW安装在C:\MinGW)
PATH: C:\MinGW\bin
C_INCLUDE_PATH: C:\MinGW\include
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
LIBRARY_PATH: C:\MinGW\lib
3:相关设置
eclipse-->Window->Preferences->C/C++->New CDT project wizard->Makefile Project
找到 Binary Parser 把Elf Parser取消, 选中 PE Windows Parser.
由于在MinGW目录下的make文件名为"mingw32-make.exe", eclipse默认的调用文件名为"make.exe"
所以先将MinGW目录下文件名为"mingw32-make.exe"做个备份,然后将该文件重命名为"make.exe"
三:编写一个java类 生成.h头文件
package test; class Hello { public native void sayHello(); static { System.loadLibrary("hello"); } public static void main(String[] args) { Hello h = new Hello(); h.sayHello(); } }
|
在项目的src目录下
用命令 javac test/Hello.java 生成 Hello.class文件
javah -jni test.Hello 生成 test_Hello.h文件
内容如下:
#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
|
四:创建一个C项目 生成dll文件
创建一个c project 并把test_Hello.h拷进去
1.编写C类:hello.c
#include <jni.h> #include "test_Hello.h" #include <stdio.h>
int main(void) { return 0; } JNIEXPORT void JNICALL Java_test_Hello_sayHello(JNIEnv *env, jobject obj) { printf("Hello World !\n"); return; }
|
2.生成hello.o文件
右键点击项目 make targets--build生成hello.o
target name 随便
make target 随便
命令默认就可以
3.生成hello.dll文件
cmd切换到hello.o目录下
执行命令:gcc -I"D:\DevelopmentSoft\jdk1.6.0_07\include" -Wl,--add-stdcall-alias -shared -o hello.dll hello.o
在该目录下则会生成hello.dll文件
备注:若是c++项目 则将gcc 改成g++即可
五:将该hello.dll文件 拷入先前的Hello.java项目中 执行
控制台输出:Hello World !
六:备注
1:java调用so(C)
java和c / c++通信都可以通过jni来实现。 在java代码中:
System.loadLibrary("Hello");
Hello不能写成Hello.dll或者Hello.so,它会根据系统平台自动填充,需要注意的是在unix/linux下生成.so动态库文件的时候,
需要在Hello.so前添加lib,否则找不到.so文件(libHello.so),运行的时候需要指定.so的路径:
java -Djava.library.path=/homw/user/so所在目录 -jar Hello.jar
2:命令整理:
以c为例(如果是c++,则把gcc改成g++就OK):
1:在unix/linux环境下
1.1:生成.o文件
gcc -I/usr/lib/j2sdk1.5-ibm/include -fPIC -c example.c
1.2:生成动态库.so文件
gcc -shared -WI -soname example.o -o libexample.so
2:在windows环境下
2.1:生成.o文件
gcc -c -I"D:\Program Files\Java\jdk1.6.0_10\include" -I"D:\Program Files\Java\jdk1.6.0_10\include\win32" -o Hello.o Hello.c
2.2:生成dll文件
gcc -I"D:\Program Files\Java\jdk1.6.0_10\include" -Wl,--add-stdcall-alias -shared -o Hello.dll Hello.o
参考地址:http://www.blogjava.net/orangewhy/archive/2007/05/24/119645.html
http://ironurbane.iteye.com/blog/375740
以上两个参考地址中 我中和了一下 才能出来!
分享到:
相关推荐
免费下载 eclipse+CDT插件+minGW编译软件+安装c++说明书.rar eclipse++cdt+MinGW_开发环境配置——详细说明.pdf
Eclipse+CDT+MinGW_配置_CC++_开发环境
本来想全部上传,文件太大超过50M,eclipse和cdt,MinGW安装问题不大,安装 MinGW-6.3.exe 配置环境变量,在path里加入D:\MinGW\bin 路径 安装 eclipse-SDK-3.7-win32.zip help--》install new software--》add--...
NULL 博文链接:https://zsnlovewl.iteye.com/blog/657448
Eclipse+CDT+MinGW 配置安装的心得,包括下载、安装、运行、调试,测试成功;
如何在Linux使用Eclipse + CDT开发C C++程序 主要在LINUX下配置,试过了,方法正确
Eclipse+MinGW+CDT设置文档,包括MinGW手动安装,环境变量设置等
在Windows下用Eclipse+CDT+cygwin搭建GDB调试平台 以下软件均为Windows平台下的版本。 1、 安装JDK,目的是为了Eclipse的运行。 版本是jdk-1_5_0_06-windows-i586-p.exe或更高 ,下载地址...
windows+eclipse+cdt开发环境配置
在用Eclipse编写Java应用程序时,感觉很爽,Eclipse不愧是强大的IDE,不冤枉IBM花看那么多钱和众多开源爱好者的努力(你们辛苦了!!谢谢!!!)。突发奇想,想玩玩Eclipse编写C++程序。 。。。。。。 在Windows下...
配置后,可以在Eclipse下开发C、C++
NULL 博文链接:https://zengxx1989.iteye.com/blog/563344
NULL 博文链接:https://fantastic361.iteye.com/blog/766079
Eclipse+CDT+GDB调试android NDK程序
Eclipse+CDT+GDB调试android_NDK程序
Linux下eclipse+cdt进行C开发调试
V. Eclipse+CDT+MinGW 进行JAVA调用C/C++ 34 一、 安装eclipse3.2。 34 二、 安装MinGW。 34 1、 下载MinGW 34 2、 安装 34 3、 安装版本 34 4、 选择安装的编译器 34 5、 选择安装路径,下一步 35 6、 等待下载...
Eclipse cdt+ MinGW 在Windows下编程