java native方法

这次demo的操作步骤如下

你好! 这是我第一次使用 java本地方法 。如果你想学习如何使用java本地方法, 可以仔细阅读这篇文章,了解一下java调用c方法的基本语法知识。

先定义一个java类,这个java类带有一个native方法和一个测试方法

D:\download_projects\home\JNITest\src\memory下的Meet.java类

public class Meet {
    static{
        System.loadLibrary("Meet");
    }
    native void fuckYou();

    public static void main(String[] args) {
        new Meet().fuckYou();
    }
}

把这个类编译

javac Meet.java,生成Meet.class

把这个类生成头文件(.h)

javah memory.Meet,生成memory_Meet.h文件,如下所示:
native方法在h文件里的定义格式为java_包路径_类名_方法,测试方法不会在h文件里生成对应方法

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class memory_Meet */

#ifndef _Included_memory_Meet
#define _Included_memory_Meet
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     memory_Meet
 * Method:    fuckYou
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_memory_Meet_fuckYou
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

写一个c文件,让这个c文件里的c方法引用.h文件,c文件叫做Meet.c

方法名字和.h文件的名字一样,java_包路径_类名_方法(JNIEnv *env, jobject thisObj),env是java运行环境,thisObj是Java方法

#include<jni.h>
#include <stdio.h>
#include "memory_Meet.h"

JNIEXPORT void JNICALL Java_memory_Meet_fuckYou(JNIEnv *env, jobject thisObj) {
   printf("Fuck you on Meeting you!\n");
   return;
}

把Meet.c生成Meet.o文件

百度了一下o文件好像是linux环境下用的,windows下是dll文件
gcc -c -I"C:\Program Files\Java\jdk1.8.0
dk1.8.0_201\include\win32" memory/Meet.c

把这个o文件转成dll文件,生成Meet.dll

gcc -Wl,--add-stdcall-alias -shared -o Meet.dll Meet.c

测试结果

执行Meet.c,打印出Meet.c中c实现的打印语句:
Fuck you on Meeting you!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值