Linux下jni 调用 小例子

先创建一个Java Project ,然后创建一个类HelloWorld

public class HelloWorld {
    public native void sayHello();
    
    static {
        System.loadLibrary("HelloWorld");
    }
    public static void main(String[] args){
        (new HelloWorld()).sayHello();
    }
}

javac HelloWorld.java 生成.class文件

javah -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:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif


在同一目录下建HelloWorld.c文件,内容如下:

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

JNIEXPORT void JNICALL Java_HelloWorld_sayHello
  (JNIEnv *env, jobject obj){
    printf("HelloWorld!!!");
}

注意修改一下函数的参数列表


下面生成.so文件

gcc -fPIC -shared -I /usr/lib/jvm/jdk8/include -I /usr/lib/jvm/jdk8/include/linux -o libHelloWorld.so HelloWorld.c

其中-I后面跟的是jni.h和jni_md.h文件的路径 不加的话会报错,表示没有找到jni.h和jni_md.h

生成.so之后 执行java HelloWorld

可能会报错,so文件不在library路径下

这时候设置一下LD_LIBRARY_PATH 命令 export LD_LIBRARY_PATH=/home/hana/lib  (这个路径可以根据自己需要设置,或者自己创建这样一个文件夹,专门放置so文件)

把so文件拷贝进去

再执行java HelloWorld

就OK了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值