温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java如何调用C++程序

发布时间:2022-02-23 15:14:43 来源:亿速云 阅读:802 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关Java如何调用C++程序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1、编写Java程序:HelloWorld

代码如下:

package HelloWorld;
public class HelloWorld {
   public native void sayHello();   
   public static void main(String[] args) {
   	System.loadLibrary("Win32Project1");
   	HelloWorld tNative = new HelloWorld();
   	tNative.sayHello();
   }
}

2、Windows环境下,在cmd中编译以上程序

编译通过后,使用 javah -jni HelloWorld.HelloWorld命令,在src文件夹下生成HelloWorld_HelloWorld.h文件(注意,此处我写的两个HelloWorld,前一个指包名,后一个指类名,由于我是写在eclipse中的,所以需要写明包名和类名,这样在cmd中编译、运行时才不会报错)。

在执行完这一步后,能够看到HelloWorld.java、HelloWorld.class、HelloWorld_HelloWorld.h这三个文件是位于同一个src文件夹下的,如下图所示(注意,此处的src文件夹是在eclipse中创建HelloWorld这个java project时自动生成的,并非手动创建的):

Java如何调用C++程序

3、编写C++程序

打开Visual Studio 2013,执行“文件—>新建—>项目—>Visual C++—>Win32 项目—>确定—>下一步–>选择DLL(D)–>完成”。

注意,设置好项目名称以及项目文件所在的位置,如下图标红处所示:

Java如何调用C++程序

创建好项目之后,将之前生成的HelloWorld_HelloWorld.h头文件添加到项目的“头文件”中,并在源文件中添加helloworld.cpp这一文件,如下图所示:

Java如何调用C++程序

接下来,在helloworld.cpp文件中输入以下代码:

// helloworld.cpp : 定义DLL应用程序的导出函数。
//
#include "stdafx.h"
#include "HelloWorld_HelloWorld.h"
#include<iostream>
using namespace std;
JNIEXPORT void JNICALL Java_HelloWorld_HelloWorld_sayHello(JNIEnv *, jobject)
{
	cout << "hello world" << endl;
}

右键该项目的项目名,选择“生成”。注意,此时会报错&lsquo;error C1083: 无法打开包括文件: “jni.h”: No such file or directory&rsquo;,解决的办法是:将你电脑上Java文件夹下,jdk目录的include目录下的jni.h文件(比如,D:\Java\jdk1.8.0_144\include)以及win32目录下的jni_md.h文件(比如,D:\Java\jdk1.8.0_144\include\win32)都拷贝到Visual Studio\vc\include目录下即可解决该问题。然后再次右键项目名称,选择“生成”。

4、完成以上步骤后

打开你Visual Studio的C++项目源文件所在的文件夹(也就是在创建C++项目时你所选择的“位置”的目录),将Debug目录下的dll文件拷贝到Java文件夹下,jdk目录的bin目录中,如下图所示:

Java如何调用C++程序

5、重新编译HelloWorld.java程序

运行,即可得到Hello World这个结果。

Java如何调用C++程序

Java与C++的互调

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测试程序,代码如下:

Java如何调用C++程序

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

3)编写c++测试代码

Java如何调用C++程序

Java如何调用C++程序

Java如何调用C++程序

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

  • FindClass获取需要调用的类,

  • GetMethodID获取类中的方法;

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

  • CallBooleanMethod获取返回布尔类型方法

  • DestroyJavaVM释放虚拟机。

  • stoJstringjstringTostring函数,是将jvm中类型与c++类型转换。

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

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

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

Java如何调用C++程序

4)编译与运行

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

运行结果如下:

Java如何调用C++程序

Java调用C++

1)编写java代码,如下:

Java如何调用C++程序

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

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

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

Java如何调用C++程序

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

Java如何调用C++程序

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

Java如何调用C++程序

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

Java如何调用C++程序

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

配置库文件到环境变量中

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

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

Java如何调用C++程序

关于“Java如何调用C++程序”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI