java调用C++的过程?

article/2025/10/16 22:13:59

  jni是java和C、C++通信的桥梁。


java适合写上层的应用,C、C++适合写底层的应用。因为C、C++就是跟底层打交道的。


当然这里并不讨论那么多,只是我要记住这一点,我所以做的工作就是如何使用jni,把留在.java中的本地的接口,让C,C++代码实现,然后供java接口使用。是的,我想做的工作就是这样。


一、在命令提示符下,用javah命令 使带有native接口的java源文件生成对应的.h文件,供C++语言实现。

我想补充内容:java源文件就是用java语言编写的以.java为后缀名的代码文件。

类文件是经过javac编译过后的字节码文件。

类文件通过jvm的解释翻译为本机能够识别的机器语言。

源代码是给程序员看的,类文件是给jvm看的,机器语言是给计算机的cpu用的。

简单的执行:

用javah命令生成本地接口类的头文件;

我想说的是:javah -jni Person 和javah Person似乎是一样的,但是在实际当中最好加上“-jni”这个参数

然后就是把Person.h这个头文件添加到vs2013下去编译成dll库文件。

这里也截个图,因为有时就连这简单的几步也走不下去,真的很累的。

到这里就可以引入头文件了。把头文件拷贝到工程的目录,不然你通过工程添加文件向导,还的重新包含该文件的路径,那样又麻烦了。




紧接着就是编译出DLL文件的过程。

然后把这个dll文件拷贝到桌面,因为Person.java文件在桌面呢,我这只是想 在命令提示符下简单实验而已。

修改Person.java源文件,加载dll文件,然后再次编译执行。


到这里为止,算是通过win7下的命令提示符,编译java的过程,以及C++语言实现java本地接口,java使用该接口的过程。

虽然这个简单的操作没有意义,其实我是想引入下一个话题,那就是自己在命令提示符符下面,使用javah命令,使java 原生文件生成.h文件是非常的麻烦的。能不能通过eclipse来简单配置一下,让我们自动生成.h文件更加的方便一些呢?答案肯定了!下面就继续截图。

由于我的建好过了,我就不再重复建了,我写这个文档的时候,实际是为了加深自己的记忆,但是真的害怕有人看到我的总结,看不懂会骂我,也为了帮助像我一样需要帮助的人,当遇到困难的时候,每有人帮助和理解,是真的很痛苦,有些东西,自己干琢磨,花费了很长的时间,抹杀了很大的信心,哎!

Name:Java_JavaH

Location:D:\Program Files\Java\jdk1.7.0_67\bin\javah.exe

Working Directory:${project_loc}${system_property:file.separator}\src

Arguments:-classpath ${project_loc}${system_property:file.separator}\src -d ${project_loc}${system_property:file.separator}\jni -jni ${java_type_name}  根据实际环境修改。




到这里eclipse下native接口文件自动生成.h文件的配置完成。

效果就是

到这里自动的生成native所对应的.h文件算是完成了。但是还有的问题就是引入编译后的DLL的问题,网上的说法不一,但是我的实验是:把Dll放到C:\Windows\System32目录下是可以引入的,但是配置放到环境变量path下是不行的,有的人说的很多,我都懵了。

但是总是放到C:\Windows\System32这么目录下也不行的,因为这是在windows下,如过在Max os下呢,所以,引用C++编译出来的dll文件,java文件在编译的时候,加载这个dll文件,如何让它识别呢?

看截图吧!

生成dll的文件,拷贝到一个项目下的目录中,比如我把他拷贝到jni目录。

然后添加引用。。。注意了


这篇文档记录的是java调用C++的过程!以后的内容会慢慢补充!





http://chatgpt.dhexx.cn/article/T4ThEkIE.shtml

相关文章

JAVA调用C语言程序

JAVA调用C语言程序 JAVA调用C语言程序1. 编写带有native声明的方法的Java类2. 使用javah 生成:jniSample.h的头文件3. 使用C实现本地sum方法:(这里我生成文件时候,误写了jinSample)。4. 将本地方法编写的文件生成动态链接库。5. 再次刷新项目…

Java简单调用C语言函数

Java简单调用C语言函数 1.安装Dev-Cpp2.编写并编译Java代码3.新建工程4.修改C代码4.1将第2步生成的.h文件复制黏贴到dll.h里面4.2修改dllmain.cpp文件4.3 保存并编译4.4编译错误解决 5.将编译好的dll文件放到java安装目录下的bin目录下6.运行 1.安装Dev-Cpp 2.编写并编译Java代…

C 调用 Java 方法

文章目录 1 Java 代码2 C 代码3 总结3.1 获取参数3.2 调用方法 1 Java 代码 JNI 代码 package com.karashok;import java.util.UUID;public class JNIDemo {/*** 获取静态方法返回值*/public static native String sayHello();/*** 获取方法返回值*/public native String say…

java调用c/c++代码

JNI是Java Native Interface的英文缩写, 中文翻译为本地调用, 自从Java 1.1开始就成为了Java标准的一部分。 C/C是系统级的编程语言, 可以用来开发任何和系统相关的程序和类库, 但是Java本身编写底层的应用比较难实现, 使用JNI可以调用现有的本地库, 极大地灵活了Java的开发。…

java调用C++代码

首先我的参考博客如下: https://www.cnblogs.com/CLAYJJ/p/7725975.html https://www.cnblogs.com/xiaocainiao2hao/p/5619862.html https://www.cnblogs.com/langtianya/p/3470896.html 流程如下: 1.建立一个java文件,在这里我只写了一…

C语言调用Java JNI

最近项目中需要使用JNI,所以研究了一下,其中遇到过不少问题,总结一下,让遇到同样问题的人可以得到解决。 在C/C中调用Java的方法一般分为五个步骤:初始化虚拟机、获取类、获取类的方法、创建类对象、调用方法和退出虚…

java程序如何调用C++代码

看到java多线程中的Thread.isAlive()的类型为native,进一步去联想native方法什么时候用呢?自己能不能编写native方法? 经网上查资料: java中native修饰符的含义为“a native method is a java method whose implementation is p…

Java调用C++程序实现方法

Java调用C程序实现方法(1) 这篇博文是自己在学习过程中,踩了很多坑之后,为了避免广大热爱编程的盆友再像我这样浪费太多时间,索性将自己的实现方法总结出来,以供大家参考。程序最终实现的是Hello World效果,话不多说&…

从 C/C++ 程序调用 Java 代码

JNI允许您从本机代码内调用 Java 类方法。 要做到这一点,通常必须使用 Invocation API 在本机代码内创建和初始化一个 JVM。 下列是您可能决定从 C/C 代码调用Java 代码的典型情况: 1.希望实现的这部分代码是平台无关的,它将用于跨多种平台…

使用Java调用C/C++

文章目录 前言JNI概述例子编写Java代码编译生成的class文件:JNITest.class在命令行下使用javah生成C/C头文件。在工程的bin目录下输入以下命令:实现C代码。在VS2008中创建一个Win32 project,类型为DLL。构建C项目将dll文件复制到Java工程的bin目录下 前言…

java调用c/c++

最近项目想将比较重要的配置文件加密、综合考虑后决定用java jni实现,步骤如下 1.定义java本地接口 package com.msg.jni;public class JniMsg {static {try {String os System.getProperty("os.name").toLowerCase();String path "F:/opt/"…

C/C++如何调用Java

前言 简单介绍C/C如何调用Java,内容适合未接触过此类工程的朋友作为上手参考。 一、编译环境 1. 64位的win10系统 2. JDK:jdk-8u181-windows-x64.exe 3. IDE VS2017 二、调用步骤及Java虚拟机使用方法 一般步骤: 编写Java代码, 并编译…

java调用C

文章目录 idea创建一个java类通过命令生成.h文件vs2015创建dll项目修改dll项目的属性补充dll项目的头文件和源文件导入文件源文件的制作 生成dll文件idea导入dll文件idea使用函数 这个确实卡了我一段时间。 先说说必要性吧。 java无法处理的操作(指向地址&#xff…

Java调用c/c++(JNI)最详细步骤

一、JNI(Java Native Interface)的作用就是Java通过JNI调用其他语言的函数(或方法)(主要是C&C)。 二、准备 1. java8系列jdk,有很多版本,任选一个即可,如jdk1.8.0.231。安装好,配置好环境。 2. vs20…

使用java调用C语言程序教程

1.idea创建一个java类 严格来说,核心步骤并不是创建一个java类,而是创建一个方法,那个方法要被native修饰,这才是关键。 接着在TestNativeCode类当中声明我们的本地方法: package com.wwj.nativecode; public class T…

linux中文语言包下载地址,centos中文语言包-官方版-centos中文语言包fonts-chinese-3.02-12.el5.noarch.rpm-独木成林...

centos中文语言包 fonts-chinese-3.02-12.el5.noarch.rpm,直接在目录下运行: rpm -ivh fonts-chinese-3.02-12.el5.noarch.rpm linux中文文件名乱码的解决办法(安装中文支持包) 由于安装英文版的系统不支持中文,出现中文文件名乱码。 下面操作…

Linux-centos安装MySQL8.0.22连接驱动文件mysql-connector-java-8.0.22-1.el7.noarch.rpm

目录 1、下载地址 2、选择版本 3、安装驱动 1、下载地址 https://downloads.mysql.com/archives/c-j/ 2、选择版本 选择对应的版本,这里系统选择Redhat系列Linux7,驱动版本选择8.0.22,点击download下载到本地再上传至服务器安装。 也可…

Mysql-MHA 安装过程中遇到的问题 :报错rpm -ivh mha4mysql- manager- 0.56-0.el6.noarch.rpm错误:依赖检测失败:

rpm -ivh mha4mysql- manager- 0.56-0.el6.noarch.rpm 错误:依赖检测失败: perl(Config::Tiny) 被 mha4mysql-manager-0.56-0.el6.noarch 需要 perl(Log::Dispatch) 被 mha4mysql-manager-0.56-0.el6.noarch 需要 perl(Log::Dispatch::File) 被 mha4mysq…

Linux下载并安装rabbitmq-server-3.6.5-1.noarch.rpm

目录 1.安装rabbitmq所需要的依赖包 2.下载安装包 3.安装服务命令 4.修改配置 5.启动rabbitmq 6.rabbitmq控制台安装 7.访问你的虚拟机 ip:15627 会出现下面的页面 用户名和密码都是 guest 8.常用命令 1.安装rabbitmq所需要的依赖包 yum install build-essential o…

centos rpm安装mysql时依赖检测失败:mysql57-community-release 与 mysql80-community-release-el8-3.noarch 冲突

1.出现以上报错,说明MySQL安装版本冲突 首先卸载原来的MySQL rpm -qa |grep mysql //搜索安装的MySQL包rpm -e --nodeps 搜索出来的包名 //卸载示例: [rootcentos8s ~]# rpm -qa |grep mysql mysql57-community-release-el7-11.noarch [rootcent…