在cenos7下写jni程序

第一次在cenos7下写jni程序,留作备忘

  • 先创建一个jnidemo.java程序
public class jnidemo{
    native void printHello();

    static{
        System.load("/home/liuzao/ldd3_examples/jnidemo/jnidemo.so");	//使用绝对路径	
        //System.loadLibrary("jnidemo");							  //使用相对路径
    }

    public static void main(String[] args){ 
        jnidemo myJni = new jnidemo();
        myJni.printHello();
    }
}

理解:要在c语言实现的函数前,需要加native关键字,c语言的函数保存在jnidemo.so的动态库中,

​ 加载动态库有两种方法,一种是使用绝对路径,一种是使用相对路径,

  • 将java程序使用javac编译,生成jnidemo.class文件
javac jnidemo.java
  • 将java程序使用javah, 生成jnidemo.h文件
javah jnidemo

​ jnidemo.h文件如下

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

#ifndef _Included_jnidemo
#define _Included_jnidemo
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     jnidemo
 * Method:    printHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_jnidemo_printHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
  • 编写c语言程序jnidemo.c
#include <stdio.h>
#include "jnidemo.h"

    JNIEXPORT void JNICALL Java_jnidemo_printHello(JNIEnv *env, jobject object)
    {
        printf("This is c : hello\n");
        return;
    }
  • 将c语言生成动态链接库.so文件
gcc -I /usr/java/jdk1.8.0_171/include/ -I /usr/java/jdk1.8.0_171/inlude/linux/ -fPIC -shared -o jnidemo.so jnidemo.c
  • 运行java程序
java jnidemo

注意:每次修改完java代码,需要运行一次javac jnidemo

​ 每次修改完c代码,需要编译一次动态链接库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值