Mac下Java JNI (java native interface)调C

本文详细介绍了如何通过Java Native Interface (JNI)实现Java与C/C++代码的交互。从编写带有native声明的Java类开始,到生成并编译本地方法的动态链接库,最后在Java环境中调用这些本地方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.编写带有native声明的方法的Java类

2.使用javac命令编译编写的Java类

3.使用java -jni className 来生成后缀名为.h的头文件

4.使用其他语言(C、C++)实现本地方法

5.将本地方法编写的文件生成动态链接库

 

一代码:(不要带包路径)

/**
* native-0study
*
* @author xuedui.zhao
* @create 2018-04-23
*/
public class HelloWorld {
public native void hello();

static{
System.loadLibrary("hello");
}

public static void main(String[] args){

new HelloWorld().hello();
}
}

二:

在终端执行 : javac HelloWorld.java

这时会生成HelloWorld.class 文件

三:使用java -jni className 生成后缀名为.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: hello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_hello
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

四:创建 HelloWorldImpl.c 文件

#include "jni.h"
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env,jobject obj){
printf("Hello World!\n");
return;
}

五:将本地方法编写的文件生成动态链接库

gcc -dynamiclib -I /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/include HelloWorldImpl.c -o libhello.jnilib
此时会抛出异常:

HelloWorldImpl.c:1:10: fatal error: 'jni.h' file not found
#include "jni.h"
^~~~~~~
1 error generated.

六:sudo cp /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/include/darwin/jni_md.h /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/include

七:ls -al

      drwxr-xr-x 7 xuedui.zhao staff 224 4 23 21:35 .

     drwxr-xr-x 9 xuedui.zhao staff 288 4 23 11:52 ..

     -rw-r--r-- 1 xuedui.zhao staff 442 4 23 14:07 HelloWorld.class
     -rw-r--r-- 1 xuedui.zhao staff 377 4 23 14:07 HelloWorld.h
     -rw-r--r-- 1 xuedui.zhao staff 276 4 23 14:06 HelloWorld.java
    -rw-r--r-- 1 xuedui.zhao staff 170 4 23 21:27 HelloWorldImpl.c
    -rwxr-xr-x 1 xuedui.zhao staff 8400 4 23 21:35 libhello.jnilib

八:终端执行 : java HelloWorld

     Hello World!

转载于:https://www.cnblogs.com/snowHorse/p/8921995.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值