使用jni调用java的c本地代码
#教程 #java #learning #jni

你好社区!
这是我的第一篇文章,希望您喜欢它!请注意,这里的所有内容都是关于我对JNI的研究。随意提出建议,更正等:D

很好阅读!^^

从Java代码到C代码的本机调用。

Java上的关键字“本机”允许我们使用JNI。

来调用本机库

该文档基于Baeldung帖子,Prof. Gustavo Leitão视频和Oracle关于 jni 的文档。。

1.简介

jni( java本地接口)允许Java访问C和C ++上的代码。

通常用于细节性能案例,处理硬件甚至使用现有库(不需要重写)。

2.“本地”关键词。

当我们与JNI合作时,需要使用本机关键词。

这个关键词对JVM说:“该方法对其他语言具有实现”。

这是本机方法的示例:

public native void myNativeMethod();

本机方法就像摘要一样,其实现将在分离的本机代码文件而不是 .java One中进行。

3.“ system.loadlibrary()”方法。

为了使JVM使用本机代码,必须使用静态方法 system.loadlibrary(String libname)。那将将提供的库从文件系统加载到我们的内存中。

这是一个通话示例:

System.loadLibrary(mylibrary);

非常重要的是,根据参数所提供的库的名称需要遵循某些规则,具体取决于JVM正在执行的平台。例如,让我们假设一个称为“税收计算者”的库。下表显示该示例应使用哪些名称。

系统名称 参数值 文件的名称(没有空格空格)
Windows 税收计算器 税收计算器 .dll
Solaris 税收计算器 lib 税收计算器 .so

所提供的参数是由 jvm 自动转换的,如列从列“参数值”到“名称文件”。

另外,我们可以使用命令System.load(D:\\my\\library\\path\\libmylibrary.dll)通过其完全路径找到库。

4.一步一步。

简单介绍之后,让我们通过在Java中创建计算器来做一个简单的示例,但在c。

上进行所有计算

4.1。创建Java程序。

第一步是创建我们的Java类并声明其方法要在另一种语言上实现。如前所述,我们需要使用方法System.loadLibrary(mylibrary)加载库。

image

请注意,本机方法在这里没有实现,因为它将在稍后在C文件上完成。编译此Java类后,没有错误。

MainClassCompileResult

4.2。生成C标头。

Java的编译器允许我们使用以下命令自动生成C标头:

javac Calculator.java -h ../c/

其中:

javac:执行Java编译器。

Calculator.java:是需要在C中实现的类 -h:说明编译器在哪里保存本机标题文件。

../c/:是要保存标头的路径。

注意:如果您在10之前运行版本,请使用javah代替javac -h <path>

执行该命令后,生成了一个新的 .h 。在那里,我们可以看到使用“本机”关键词定义为本机的所有方法的签名。

headerGenerated

4.3。用本机代码实现方法。

在所有这些步骤之后,现在我们需要为Java声明的方法创建C代码实现。

让我们创建一个新的 .c 文件,在那里,我们包含了生成的标头文件并在其签名之后实现了所有方法的函数。

CalculatorInC

请注意,方法签名是从生成的标头中复制的,其差异是所有参数已更改为具有可以在代码中引用的名称。

4.4。编译C类。

对于编译C类,我将使用 gcc 。如果您使用的是Windows(像我一样),请使用该step-by-step拖延它。如果您使用的是Linux,则必须已经安装了它。

要编译它,我们可以使用以下命令(您必须为您的情况更改它)。

gcc -o libcalculator.dll -shared -I"your\java\home\include" -I"your\java\home\include\win32" -I"your\project\c" ./Calculator.c;

其中:

gcc:执行GNU编译器C.

-o:说明编译器在哪里保存生成的文件。

libcalculator.dll:是生成文件的名称。

-shared:说编译器创建共享库。

-I"your\java\home\include":是jni.h的位置,由Calculator.h使用。


-I"your\java\home\include\win32":是windows的jni_md.h的位置,Calculator.h也使用。


-I"your\project\c":是Calculator.h的位置,由Calculator.c使用。

./Calculator.c:这是我们要编译的文件

所有代码都需要一行执行。之后,将生成一个libcalculator.dll

LibGenerated

4.5。执行我们的程序。

在所有这些步骤之后,我们能够执行我们的程序。只需在your/project/java上使用以下命令:

java -Djava.library.path=location/of/libcalculattor Calculator 2 2

注意:如果您使用了System.load而不是System.loadLibrary,则不需要提供-Djava.library.path=location/of/libcalculattor参数。

以下图像显示了工作的应用程序:

Result

这是如何使用 jni 的基本示例。您可以通过单击here查看代码。