java与c++互调

2 篇文章 0 订阅

c++调用java

1)  Unix环境下安装jdk,并且设置jdk和jre的环境变量,如下:

JRE_HOME=/usr/java/jdk1.6.0_04/jre

CLASS_PATH=.:/usr/java/jdk1.6.0_04/lib/dt.jar:/usr/java/jdk1.6.0_04/lib/tools.jar

JAVA_HOME=/usr/java/jdk1.6.0_04

LD_LIBRARY_PATH=/usr/java/jdk1.6.0_04/jre/lib/amd64:/usr/java/jdk1.6.0_04/jre/lib/amd64/server

PATH=/usr/java/jdk1.6.0_04/bin

   2)编写java测试程序,代码如下:

编译,生成MyTest.jar,将jar放到unix环境测试目录下。

3)编写c++测试代码

  


其中JNI_CreateJavaVM表示创建java虚拟机环境,

FindClass获取需要调用的类,

GetMethodID获取类中的方法;

CallStaticIntMethod获取返回整型静态方法;

CallBooleanMethod获取返回布尔类型方法

DestroyJavaVM释放虚拟机。

stoJstring和jstringTostring函数,是将jvm中类型与c++类型转换。

调用类中的方法GetMethodID调用时,第三个参数“(II)I”表示方法的输入输出参数类型,

“()”里面的标识输入参数类型,括号外面的表示输出参数类型。参数类型查看,可以根据编译的.class文件,使用命令javap -s -p 类名查看,如下图:

注意:一个进程中只能启动一个java虚拟机。

4)编译与运行

编译时设置相关的头文件和库文件路径,编译命令:g++ testjava.cpp -o testjava -I${JAVA_HOME}/include-I${JAVA_HOME}/include/linux -L${JRE_HOME}/lib/amd64/server –ljvm

运行结果如下:


 

 

java调用c++

1)  编写java代码,如下:

使用native标识方法由c++实现;

System.loadLibrary表示加载c++库,示例中加载的库文件为libMyTest.so

2)将java文件编译成.class文件,使用javah命令,根据class文件生成c++的接口头文件

 

此时生成MyTest.h文件,内容如下:

3)编写接口函数的实现,如下:

 

4)编译c++文件,生成库文件

这时生成了libMyTest.so库文件。

配置库文件到环境变量中

exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/export/home/process/PM/testjava

5)将java程序的jar文件放到同一个目录下,运行jar,运行结果如下,此时调用的sub函数,是C++程序实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值