iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Java如何调用C++程序
  • 603
分享到

Java如何调用C++程序

2023-06-29 04:06:41 603人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关Java如何调用c++程序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、编写Java程序:HelloWorld代码如下:package HelloWorld;pu

这篇文章将为大家详细讲解有关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/jreCLASS_PATH=.:/usr/java/jdk1.6.0_04/lib/dt.jar:/usr/java/jdk1.6.0_04/lib/tools.jarJAVA_HOME=/usr/java/jdk1.6.0_04LD_LIBRARY_PATH=/usr/java/jdk1.6.0_04/jre/lib/amd64:/usr/java/jdk1.6.0_04/jre/lib/amd64/serverPATH=/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++程序”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: Java如何调用C++程序

本文链接: https://www.lsjlt.com/news/322645.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java如何调用C++程序
    这篇文章将为大家详细讲解有关Java如何调用C++程序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、编写Java程序:HelloWorld代码如下:package HelloWorld;pu...
    99+
    2023-06-29
  • Java如何调用Matlab程序
    目录Java如何调用Matlab程序1. 检查Matlab内置的Java版本和系统安装的Java版本是否一致?2. 准备一份要调用的Matlab代码3. 将Matlab代码打包成Ja...
    99+
    2024-04-02
  • java如何调用Python程序
    这篇文章主要介绍了java如何调用Python程序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。因为工作需要,就简单学习了下,用的是IDEA ,jdk 1.8本地Proces...
    99+
    2023-06-20
  • 如何从Java程序中调用其它程序
    小编给大家分享一下如何从Java程序中调用其它程序,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Rmi (Remote Method Invocation,远程方...
    99+
    2023-06-03
  • C++如何调用简单的python程序
    目录一、基本环境的搭建二、直接在C++里面调用执行python语句三、调用python脚本文件里面的定义函数调用不含参数的函数调用含多个参数的函数总结一、基本环境的搭建 首先,用vs...
    99+
    2023-02-17
    C++调用python程序 C++调用python C++调用python
  • 如何对Java程序调优
    本篇内容介绍了“如何对Java程序调优”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、性能诊断工具性能诊断一种是针对已经确定有性能问题的系...
    99+
    2023-06-16
  • Java调用C++程序的实现方式
    目录Java调用C++程序1、编写Java程序:HelloWorld2、Windows环境下,在cmd中编译以上程序3、编写C++程序4、完成以上步骤后5、重新编译HelloWorl...
    99+
    2024-04-02
  • Shell如何执行/调用Java/Jar程序
    这篇文章主要介绍了Shell如何执行/调用Java/Jar程序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Shell执行/调用Java/Jar程序例子的实例详解前言:最近要...
    99+
    2023-06-09
  • 详解如何在Java中调用Python程序
    Java中调用Python程序 1.新建一个Maven工程,导入如下依赖 <dependency> <groupId>org.python<...
    99+
    2024-04-02
  • C语言中程序如何调用Python脚本
    目录一、环境配置0x00 平台0x01 添加 包含目录 和 库目录0x02 添加依赖项二、案例三、常用API有时候在写C语言程序的时候又想利用一下pyt...
    99+
    2024-04-02
  • Mac下如何使用Java调用c/c++
    小编给大家分享一下Mac下如何使用Java调用c/c++,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言向量化执行逐渐成为了列存数据库优化的热门方向,而Java...
    99+
    2023-06-20
  • c语言如何单步调试程序
    要在C语言中进行单步调试程序,可以使用调试器。调试器是一个开发工具,可以帮助程序员在程序执行过程中逐行跟踪代码,查看变量的值,以及检...
    99+
    2023-08-24
    c语言
  • c语言主程序怎么调用子程序
    在C语言中,主程序可以通过函数调用的方式来调用子程序。以下是一个简单的示例:```c#include // 声明子程序void su...
    99+
    2023-10-12
    c语言
  • 如何在Linux系统上调试Java程序?
    在Linux系统上调试Java程序是Java开发者经常遇到的问题之一。本文将介绍如何在Linux系统上使用常见的调试工具来诊断和解决Java程序中的错误。 一、使用命令行调试器 1.1 启动调试模式 在Linux系统上调试Java程序的第一...
    99+
    2023-07-29
    linux leetcode windows
  • Oracle程序中如何调用sqlplus
    这篇文章主要介绍了Oracle程序中如何调用sqlplus,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。通过sqlplus可以连接数据库根据...
    99+
    2024-04-02
  • wpf应用程序如何调用webapi
    要在WPF应用程序中调用Web API,可以按照以下步骤进行操作:1. 首先,确保你的WPF应用程序与Web API项目在同一解决方...
    99+
    2023-09-16
    wpf webapi
  • Java程序调用kettle中的job.kjb和Trans.ktr如何分析
    这篇文章给大家介绍Java程序调用kettle中的job.kjb和Trans.ktr如何分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。<ol start="1" class="d...
    99+
    2023-06-03
  • 怎么从java程序中调用其它程序
    这篇文章主要介绍怎么从java程序中调用其它程序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!RMI如何用于程序间通讯,另一个用于通讯的技术是Runtime.exec() 方法。你可以用这个方法从一个运行阿java程...
    99+
    2023-06-03
  • 如何调试Vue程序
    小编给大家分享一下如何调试Vue程序,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.背景因为程序的调试非常重要,程序猿可以利用...
    99+
    2024-04-02
  • java怎么调用外部程序
    今天小编给大家分享一下java怎么调用外部程序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。java调用外部程序的方法&nb...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作