JNI调用动态库.so
来源:互联网 发布:java cp 目录结构 编辑:程序博客网 时间:2024/05/22 03:51
1.确保gcc编译器已安装
2.编写HelloJNI.java代码,用native声明需要用C实现的函数。
如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如/home/swan/test/net/wangliping/HelloJNI.java
package net.wangliping
public class HelloJNI
{
static
{System.loadLibrary("goodluck");
}public native static int get();
public native static void set(int i);public static void main(String[] args)
{
HelloJNI test = new HelloJNI();
test.set(10);
System.out.println(test.get());
}
}
3.在HelloJNI.java文件所在目录下编译.java文件。
javac HelloJNI.java
4.在~/Desktop下编译第三步中生成的.class文件,生成对应的.h头文件,本例中生成的头文件名为 net_wangliping_HelloJNI.h
javah net.wangliping.HelloJNI
5.编写HelloJNI.c文件,实现引用第4步中生成的.h头文件,并实现其中声明的方法。
#include "net_wangliping_HelloJNI.h"
int i = 0;
JNIEXPORT jint JNICALL Java_net_wangliping_HelloJNI_get(JNIEnv *env, jclass jc)
{
return i;
}JNIEXPORT void JNICALL Java_net_wangliping_HelloJNI_set(JNIEnv *env, jclass jc, jint j)
{
i = j;
}
6.将第5步中编写的HelloJNI.c文件,编译成.o文件
gcc -fPIC -D_REENTRANT -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.19/include -I/usr/lib/jvm/java-1.5.0-sun-1.5.0.19/include/linux -c HelloJNI.c
注:/usr/lib/jvm/java-1.5.0-sun-1.5.0.19/include 是jni.h头文件所在的路径
/usr/lib/jvm/java-1.5.0-sun-1.5.0.19/include/linux 是jni_md.h所在的路径
7.将第6步中生成的HelloJNI.o文件编译成.so库文件
gcc -shared HelloJNI.o -o libgoodluck.so
注:和windows下不同,linux的库文件必须是以libxxx.so形式命令的(或者 libxxx.so.y,y是版本号),lib前缀是为了系统能够识别它,xxx是java代码System.loadLibrary("xxx");中引用库的名字。
8.将第7步中生成的libgoodluck.so文件拷贝到java的加载库LD_LIBRARY_PATH指向的路径中。
前提是你有足够的权限,如果没有sudo权限的同学,用下面的方法:
1) 在/home下建立一个用来存放.so库文件的目录,比如/home/swan/lib
2) 把libgoodluck.so文件拷贝到该目录下
3)打开Terminal,运行如下命令
export LD_LIBRARY_PATH=/home/swan/lib
只在当前shell下有效...
本博主转烛补充:以下方法可以直接利用绝对路径来load这个so库文件,从而无需做上述的放置path或者更改库路径的动作。
static {
System.load("/home/swan/test/libgoodluck.so");
}
9.在运行HelloJNI.class
java net.wangliping.HelloJNI
一切正常后,可以看到运行結果是输出了10,其值是由C语言代码实现并返回的。
- JNI调用动态库.so
- Linux JNI调用so动态库示例
- Java JNI 调用 so 动态链接库
- java jni 调用.so动态库
- Java JNI 调用 so 动态链接库
- Java JNI调用so动态链接库
- Android studio通过JNI调用动态链接库SO
- Android 静态和动态的调用so库(JNI)
- jni 调用共享SO库
- android jni调用so库
- 编译JNI动态库so
- Java jni 动态库 so
- Android studio下的Android JNI调用以及动态链接库.so的生成
- AndroidStudio配置NDK/JNI,完成so动态链接库的调用
- [JNI学习]---调用现有的so库
- JNI调用第三方so库
- android JNI的.so库调用
- 开发so动态库模版(NDK、JNI)
- 函数多态性带来的指针的变化
- ci+smarty结合配置方法
- 从零开始学习OpenGL ES之五 – 材质
- 打印js对象中所有的属性和值
- 】Bash下Ctrl-C、Ctrl-D和Ctrl-Z的区别
- JNI调用动态库.so
- 小问题
- 安装PL-2303出现“需要ser2pl.sys”的解决方法
- JavaScript入门之验证输入,对代码进行拆行
- ListView添加删除FooterView java.lang.Class Cast Exception: android.widget.HeaderViewListAdapter
- 题意:给10^5个点的坐标,求出最小的两个点之间的距离
- html5本地存储
- 为什么很多人工作都不开心?
- c语言学习笔记——链表