JNI java中调用c语言方法(Mac下)

JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信,在java中通过native关键字定义本地方法,并对你要调用的其他语言的方法名对应【对应的意思是有一定命名规则。】,即可在JAVA程序中调用它们。
本教程对应Mac平台Idea开发工具,而且JDK版本不能高于1.8,否则javah将命令不可用。


1.项目准备

新建纯java项目,新建如下文件HelloWorld.javaHelloWorldNative.c

这里写图片描述

2.编写HelloWorld.java文件。

HelloWorld.java 文件内容如下:
public class HelloWorld {

    static {
        //导入 HelloWorld c语言库(即导入libHelloWorldNative.jnilib文件)
        System.loadLibrary("HelloWorldNative");
    }

    //定义一个本地方法【类似java的接口,需要c语言去具体实现方法】
    public static native void cMethod();
    public static void main(String[] args){
        //调用该方法
        cMethod();
    }
}

3.添加两个指令工具:javahgcc

这里写图片描述

Program$JDKPath$/bin/javah
Parameters:-jni -classpath $OutputPath$ -d $FileDir$ $FileClass$
Working directory:$ProjectFileDir$

这里写图片描述

Program:gcc
Parameters:-dynamiclib -I /System/Library/Frameworks/JavaVM.framework/Headers $FileNameWithoutExtension$.c -o lib$FileNameWithoutExtension$.jnilib
或者(如果会报错):-dynamiclib -I $JDKPath$/include -I $JDKPath$/include/darwin $FileNameWithoutExtension$.c -o lib$FileNameWithoutExtension$.jnilib
Working directory:$FileDir$

3.编译java项目

这里写图片描述

可以看到一个out文件夹,里面放着编译后的class文件

4.执行生成头文件

这里写图片描述

生成后可以在同目录下看到HelloWorld.h文件

5.编写c语言方法

HelloWorldNative.c 文件内容如下:
#include <stdio.h>
/* 导入 生成的头文件 */
#include "HelloWorld.h"

/* 此处的方法命名要和头文件方法名相同(规则:Java语言,根包下的 HelloWorld文件中 cMethod方法) */
JNIEXPORT void JNICALL Java_HelloWorld_cMethod(JNIEnv *env, jobject c1) {
    printf("Hello World Native!!\n");
}

6.生成jinlib库,让java调用

这里写图片描述

生成后在同目录下可以看到libHelloWorld.jnilib文件

7.运行java代码

这里写图片描述

运行报错?这是因为java虚拟机在java.library.path没找到HelloWorldNative ,那我们就告诉java虚拟机。

这里写图片描述

VM options:-Djava.library.path=./src/

保存后再运行就正常了!

这里写图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值