摘要:实现一个最简单的调用编写代码代码中声明方法以绝对路径加载文件编译代码命令解释表示生成目录,生成的目录以的定义为准表示在当前所在文件夹中生成查看生成的文件和目录编写代码首先生成头文件查看生成的文件如下编写实现方法的代码代码如下简单的
实现一个最简单的 JNI 调用
编写 Java 代码package sf.gg; public class Hello{ public native static int add(int x,int y); //java 代码中声明 native 方法 static { System.load("/home/lance/main.so"); //以绝对路径加载so文件 } public static void main(String[] args){ System.out.println(add(1,1)); } }
编译 java 代码 javac -d . Hello.java
命令解释: -d:表示生成目录,生成的目录以package的定义为准;
.:表示在当前所在文件夹中生成
查看生成的文件和目录
ls -al编写C代码
首先生成.h头文件
javah sf.gg.Hello
查看生成的 sf_gg_Hello.h 文件
vim sf_gg_Hello.h
如下:
/* DO NOT EDIT THIS FILE - it is machine generated */ /* DO NOT EDIT THIS FILE - it is machine generated */ #include/* Header for class sf_gg_Hello */ #ifndef _Included_sf_gg_Hello #define _Included_sf_gg_Hello #ifdef __cplusplus extern "C" { #endif /* * Class: sf_gg_Hello * Method: add * Signature: (II)I */ JNIEXPORT jint JNICALL Java_sf_gg_Hello_add (JNIEnv *, jclass, jint, jint); #ifdef __cplusplus } #endif #endif
编写实现add 方法的 C 代码
vim hello.c
代码如下:
#include编译运行#include "sf_gg_Hello.h" JNIEXPORT jint JNICALL Java_sf_gg_Hello_add(JNIEnv *env, jclass jc, jint x, jint y){ return x+y; //简单的加法 }
OS: ubuntu 14.04 lts
gcc -fPIC -D_REENTRANT -I/usr/lib/jvm/java-8-oracle/include -I/usr/lib/jvm/java-8-oracle/include/linux -c hello.c
命令解释: man gcc
注意:需要命令中的/usr/lib/jvm/java-8-oracle/include 需要换成本机的 jdk 对应的目录
生成 so 库
gcc hello.o -o main.so -shared
查看生成的文件
ls -al
运行
java sf.gg.Hello总结
编写带有native声明的方法的Java类
使用javac命令编译编写的Java类
使用javah ...来生成后缀名为.h的头文件
使用其他语言(C、C++)实现本地方法
将本地方法编写的文件生成动态链接库
如果以其他方式调用,出现no dll或so in java.library.path ,参考此文:JAVA WEB项目加载dll文件失败,no xxx in java.library.path
输出系统 java.library.path
public class PrintPath{ public static void main(String[] args){ System.out.println(System.getProperty("java.library.path")); } }
其它相关资料参考:
System.load 和 System.loadLibrary详解 1
System.load 和 System.loadLibrary详解 2
linux/Ubuntu 下使用 java 调用 so 动态链接库详细步骤
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/64146.html
阅读 2928·2021-10-14 09:43
阅读 2866·2021-10-14 09:42
阅读 4639·2021-09-22 15:56
阅读 2355·2019-08-30 10:49
阅读 1587·2019-08-26 13:34
阅读 2369·2019-08-26 10:35
阅读 590·2019-08-23 17:57
阅读 2022·2019-08-23 17:15