ubuntu(arm64)下java调用c编译的.so动态库

安装:

sudo apt-get update 
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get install openjdk-8-jdk
sudo apt-get install openjdk-8-jdk-headless


设置:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64
export PATH=$PATH:$JAVA_HOME/bin 

建立例程目录:

com/yue/test/

com/yue/test/下生成java例程HelloJNI.java:

package com.yue.test;
//HelloJNI.java
public class HelloJNI {
    // 声明一个本地方法
    public native void sayHello();

    // 加载本地库
    static {
        System.loadLibrary("hellojni");
    }

    public static void main(String[] args) {
        new HelloJNI().sayHello();
    }
}


编译 Java 类 (注意当前路径):

javac com/yue/test/HelloJNI.java


生成 JNI 头文件(注意当前路径):

javah -jni com.yue.test.HelloJNI

就会生成一个com_yue_test_HelloJNI.h文件

内容如下:

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

#ifndef _Included_com_yue_test_HelloJNI
#define _Included_com_yue_test_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_yue_test_HelloJNI
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_yue_test_HelloJNI_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

c/c++代码:

// 
#include <jni.h>
#include <stdio.h>
#include "com_yue_test_HelloJNI.h"

// 实现本地方法
JNIEXPORT void JNICALL Java_com_yue_test_HelloJNI_sayHello(JNIEnv *env, jobject obj) {
    printf("Hello from C .so!\n");
}

编译生成共享库:

gcc -shared -fpic -o libhellojni.so -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux HelloJNI.c


执行:

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
java com.yue.test.HelloJNI
Hello from C .so!
 

此过程在3588设备上实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值