1)首先写HelloWorld的java类
class HelloWorld {
static {
System.loadLibrary("HelloWorld");
}
private native void print();
public static void main(String[] args) {
new HelloWorld().print();
}
}
2)编译 生成 .h 文件
javac HelloWorld.java
javah -jni HelloWorld
如果找不到类添加参数 -classpath ./
javah -classpath ./ -jni HelloWorld
HelloWorld.h生成如下
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
然后编写 HelloWorld.c 文件
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World In C !\n");
return;
}
3)编译c文件
gcc -shared -static -lc -I/opt/jdk/jdk1.6.0_21/include -I/opt/jdk/jdk1.6.0_21/include/linux HelloWorld.c -o libHelloWorld.so
其中 libHelloWorld.so 为链接库 前缀一定是lib 而不是 HelloWorld
-I跟单是两个jdk目录下面的头文件位置
4)运行
java HelloWorld
如果找不到类添加参数 -classpath ./
java -classpath ./ HelloWorld
分享到:
相关推荐
在这个JNI的"HelloWorld"示例中,我们可能首先会有一个Java类,它声明了一个native方法,这个方法的实现不在Java代码中,而是通过JNI接口在C++或C这样的本地语言中完成。Java类可能会包含一个`System.loadLibrary(...
这个"JNI-HelloWorld"示例揭示了JNI的基本工作流程,展示了如何从Java调用C代码并返回结果。虽然这个例子非常简单,但它奠定了进一步学习和使用JNI的基础。随着对JNI的理解深入,你可以实现更复杂的跨语言交互,如...
本主题“Java调用C程序之HelloWorld”将深入探讨如何在Java程序中调用C语言编写的代码,实现二者的交互。这个过程通常通过Java的JNI(Java Native Interface)技术来完成。 首先,我们需要了解JNI的概念。JNI是Java...
通过以上步骤,我们完成了在Linux环境下使用C语言通过JNI调用Java类的全过程。这种技术广泛应用于高性能计算、系统集成、设备驱动等多个场景,是Java和C/C++混合编程的关键技术。在实际应用中,可能还需要处理更复杂...
在`com/helloworld/`目录下创建一个名为`com_helloworld_HelloWorld.c`的C源文件,实现`com_helloworld_HelloWorld.h`中声明的函数。例如,对于上面的示例,C代码如下: ```c #include <jni.h> #include #include ...
JNI在许多场景下是必要的,比如当需要调用已有的C/C++库,或者为了性能考虑实现某些计算密集型的功能时。在这个"Java JNI HelloWorld"示例中,我们将深入探讨如何使用JNI来创建一个简单的“Hello, World!”程序。 ...
gcc -shared -o libhello.so -I/usr/lib/jvm/java-8-openjdk-amd64/include -I/usr/lib/jvm/java-8-openjdk-amd64/include/linux HelloWorld.c ``` 5. **运行Java程序**:现在,你可以从Java代码中调用本地方法了。...
在这个"Java jni调用c实例"中,我们将深入探讨如何通过JNI在Java应用程序中调用C语言编写的函数。 首先,我们需要了解JNI的基本结构。一个典型的JNI程序包括Java源代码、C/C++源代码以及对应的头文件。Java源代码中...
通过上述步骤,你就可以成功地使用JNI让Java调用C的函数了。JNI提供了一种灵活的方式,让Java开发者能够利用C/C++的强大力量,同时保持Java的灵活性和可移植性。在实际项目中,JNI常用于高性能计算、底层系统交互、...
Java Native Interface (JNI) 是Java语言与本地代码交互的桥梁,允许Java应用调用C或C++等本地语言编写的代码,这对于扩展Java功能、提高性能或集成已有非Java库具有重要意义。本文将详细介绍如何使用JNI技术实现...
这将生成一个`HelloWorld.h`头文件,其中包含了Java native方法的C/C++原型。 3. **编写本地库代码**: 根据生成的头文件,我们编写C/C++源代码,实现Java中声明的native方法。例如: ```c #include "Hello...
JNI在Java世界中扮演着重要角色,它允许Java程序调用C/C++等本地代码,反之亦然,使得Java应用可以利用底层系统的特性和效率。本文将深入介绍JNI的使用和实例,帮助开发者更好地理解和应用这一技术。 首先,我们...
5. **加载动态库**:在Java代码中,通过`System.loadLibrary("HelloWorld")`加载动态库,并在Java的main方法中调用native方法,实现Java与C/C++的交互。 下面是一个简单的JNI应用实例: 1. **创建Java类**:首先...
在"JNI HelloWorld"这个主题中,我们主要讨论的是如何通过JNI技术在Java程序中调用C语言编写的函数,实现Java与本地代码的无缝集成。 1. **JNI简介** JNI是一种接口,为Java虚拟机(JVM)提供了与本地代码(如C/...
JNI在很多场景下非常有用,比如调用现有的C或C++库、提升性能或者利用硬件特性等。以下是对JNI编程过程的详细说明: 1. **编写Java代码**: 在Java中,我们需要声明本机方法(native method),这些方法将在C或C++...
Java调用C++类库是跨语言编程中的一个重要场景,主要通过Java Native Interface(JNI)技术来实现。JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互,尤其是本地已有的C/C++代码。这篇博客...
例如,在`HelloWorld.c`或`HelloWorld.cpp`文件中,实现`Java_HelloWorld_displayHelloWorld`函数。这个函数接收JNI环境指针`JNIEnv*`和Java对象引用`jobject`作为参数,通常用于执行本地操作。 ```c #include <jni...
Java调用C/C++的过程,通常被称为JNI(Java Native Interface),是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。对于那些需要利用C或C++的高性能特性的Java开发者来说,JNI是一个重要的工具。...
Java调用C动态库是通过Java本地接口(JNI,Java Native Interface)来实现的。JNI是一种标准,自Java 1.1起成为Java平台的一部分,它的主要目的是让Java代码能够与用其他编程语言(如C和C++)编写的本地代码进行交互...
JNI为Java开发者提供了一种方式,使得他们可以编写本地方法(Native Methods),这些方法是用C++或C编写的,然后在Java应用程序中调用。JNI框架包括了Java到本地代码的接口以及本地代码到Java的接口,确保了数据类型...