linux环境java中如何调用so文件-JNT实例.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux平台Java调用so库-JNI使用例子 JNI例子一: 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文件,执行 javah -jni 包名 类名(类名不要后缀),会在classes生成一个.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例子二: public clas

文档评论(0)

勤能补拙 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档