Ubuntu下JNI的使用
2016-08-19 11:34
197 查看
本文内容参考如下链接:
http://www.cnblogs.com/bastard/archive/2012/05/17/2506877.html
第一步:
创建一个 Test.java文件
public class Test { //此处定义的便是native方法,在Test.c中实现 native public void doSomeThing(); public static void main (String args[]) { Test test = new Test(); test.doSomeThing(); } static{ //参考文献中采用的System.loadLibrary,在使用时提示找不到lob test,因此采用绝对路径加载库 System.load("/home/wangkuan/Desktop/testjni/libtest.so"); } }
第二步:
生成 Test.h文件
执行命令:javah -jni Test,若提示找不到命令,则安装java
生成Test.h文件,如下
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class Test */ #ifndef _Included_Test #define _Included_Test #ifdef __cplusplus extern "C" { #endif /* * Class: Test * Method: doSomeThing * Signature: ()V */ JNIEXPORT void JNICALL Java_Test_doSomeThing (JNIEnv *, object); #ifdef __cplusplus } #endif #endif
第三步:
创建Test.c文件
@param JNIEnv:是一个线程相关的结构体,代表了java在本线程的运行环境
@param jobject:指向在此 Java 代码中实例化的 Java 对象 LocalFunction 的一个句柄,相当于 this 指针
#include <stdio.h> #include "Test.h" //这里要包含刚才生成的头文件 JNIEXPORT void JNICALL Java_Test_doSomeThing(JNIEnv * name, jobject o) { printf("HelloWorld"); return; }
第四步:
编译生成libtest.so文件
输入命令:
gcc -fPIC -D_REENTRANT -I/usr/local/java/jdk1.7.0_40/include -I/usr/local/java/jdk1.7.0_40/include/linux -c test.c -o libtest.so-I后面的是java的include文件夹的地址,请根据您具体的java版本以及安装路径作相应的改变。。(我这里是/home/zuo/java/java-1.6/include)
-f后面的PIC表示生成的库中符号是与位置无关的。
-shared表示共享,共享库后缀名为.so。
-o libIntArray.so ,可以理解为编译后生成libIntArray.so库。
第五步:
运行Test.java;
运行结果:Helloworld
相关文章推荐
- Appium for Windows Inspector使用方法
- Linux+tomcat 验证码无法显示
- 【转】各种字符串算法大总结
- 如何使用Service的Context弹出Dialog对话框,即全局性对话框
- dtrace
- 5 个最受人喜爱的开源 Django 包
- 阅读郭林《第一行代码》的笔记——第5章 全局大喇叭,详解广播机制
- 网络爬虫中的模拟登陆获取数据(实例教学)
- Android 一站式打包(二)美团多渠道方案
- CSS border画图
- URL Connection方式 调用webservice服务
- maven项目部署到指定路径tomcat的路径下
- layoutinflater 载入动态界面
- module_param
- 2631: tree
- tjut 4857
- border:medium none,
- Windows下MyEclipse的Hadoop环境的配置
- UGUI技术之基本布局使用_Unity3D开发_蓝鸥
- 向嵌入式linux开发板移植openSSH