Linux平台使用JNI Java调用so.docx_第1页
Linux平台使用JNI Java调用so.docx_第2页
Linux平台使用JNI Java调用so.docx_第3页
Linux平台使用JNI Java调用so.docx_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. 确保gcc编译器已安装2. 编写FileUtil.java 代码,用native声明需要用c实现的函数。如果源程序是包含在package的话,应该建立同样的文件夹结构,如com/hnrbyl/rmas/util/FileUtil.java【代码】package com.hnrbyl.rmas.util;public class FileUtil public native static String ResultText(); public static void main(String args) System.loadLibrary(FileUtil);String s=FileUtil.ResultText();System.out.println(s);3. 在FileUtil.java文件所在目录下编译.java文件Javac FileUtil.java4. 编译第三步生成的.class文件,生成对应的.h头文件,本例中生成com_hnrbyl_rmas_util_FileUtilJavah classpath workspaceelectWebRootWEB-INFclasses -d d: -jni com.hnrbyl.rmas.util.FileUtil其中java中各个命令的意思-classpath 用于转入类的路径-d 输出目录-jni 生成JNI样式的头文件(默认)这个Java文件是在路径“E:workspaceelectsrc”下,包“package com.hnrbyl.rmas.util;”中的得到的FileUtil 对应的class文件,在路径“E:workspaceelectWebRootWEB-INFclassescomhnrbylrmasutil”下。注意到以上我们命令中指定的路径注意到我们的命令符的执行位置是源代码目录” E:workspaceelectsrc”-classpath 后面的路径是指包” com.hnrbyl.rmas.util”所在的根路径(如下图所示)5. 第四部中生成的头文件内容【代码】/* DO NOT EDIT THIS FILE - it is machine generated */#include jni.h/* Header for class FileUtil */#ifndef _Included_com_hnrbyl_rmas_util_FileUtil#define _Included_com_hnrbyl_rmas_util_FileUtil#ifdef _cplusplusextern C #endif/* Class: FileUtil* Method: ResultText* Signature: (I)I*/JNIEXPORT jstring JNICALL Java_com_hnrbyl_rmas_util_FileUtil_ResultText(JNIEnv*, jobject);#ifdef _cplusplus#endif#endif6. 编写FileUtil.c文件,实现引用第4步中生成的.h头文件,并声明其中的方法。【代码】#include jni.h#include stdlib.h#include FileUtil.h/JNIEXPORT jstring JNICALL Java_com_hnrbyl_rmas_util_FileUtil_ResultText(JNIEnv *env,jobject obj) char* str = Hello World!;jstring rtn;rtn = env-NewStringUTF(str);return rtn;7. 讲第6步中编写的FileUtil.c文件,编译成.so文件gcc -I/wenjin/jdk1.7.0_25/include/ -I/wenjin/jdk1.7.0_25/include/linux/ -fPIC -shared -o libFileUtil.so FileUtil.c注:/ wenjin/jdk1.7.0_25/include 是jni.h头文件所在的路径/ wenjin/jdk1.7.0_25/include/linux 是jni_md.h所在的路径8. 将第7步中生成的libFileUtil.so文件拷贝到java的加载库LD_LIBRARY_PATH指向的路径中。9. 在运行FileUtil.class在com.hnrbyl.rmas.util跟目录src下运行Java com.hnrbyl.rmas.util.FileUtil一切正常后,可以看到运行結果是输出了Hello World!,其值是由C语言代码实现并返回的。gcc -I/usr/java/jdk1.7.0_25/include/ -I/usr/java/jdk1.7.0_25/include/linux/ -lauto_analyse -lhpdf -lz -lm -ljson-c -fPIC -shared -o libFileUtil.so FileUtil.c执行该句的问题。问题:/usr/bin/ld: /usr/local/lib/libz.a(crc32.o): relocation R_X86_64_32 against a local symbol can not be used when making a shared object; recompile with -fPIC/usr/local/lib/libz.a: could not read symbols:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论