摘自http://blog.163.com/squall_smile/blog/static/6034984020129296931793/

https://my.oschina.net/simaben/blog/322850
 

linux下java调用.so文件的方法1

刚刚试过一个这样的例子,省事起见,略改并记录如下:

//package net.wangliping;
  2 public class Hello
  3 {
  4     static
  5     {
  6
  7         System.loadLibrary("goodluck");
  8     }
  9
 10     public native static int get();
 11     public native static void set(int i,String s);
 12
 13     public static void main(String[] args)
 14     {
 15         try{
 16         Hello test = new Hello();
 17         test.set(10,"5555");
 18         System.out.println(test.get());
 19         }catch(Exception ex)
 20         {
 21           System.out.println("ssssss");
 22         }
 23     }
 24 }

OK java类有了。

下面javac Hello.java

然后再javah Hello

生成了Hello.h

然后编写Hello.c

1 #include "Hello.h"
  2
  3 int i = 0;
  4
  5 JNIEXPORT jint JNICALL Java_Hello_get(JNIEnv *env, jclass jc)
  6 {
  7     return i;
  8 }
  9
 10 JNIEXPORT void JNICALL Java_Hello_set(JNIEnv *env, jclass jc, jint j,jstring s)
 11 {

13         char * tsetstr=(char*)(*env)->GetStringUTFChars(env, s, NULL);//注意此处jstring和char *的转换
 14         printf("%s--------\n",tsetstr);

15     i = j;
 16 }

保存,然后执行如下编译指令:

1 gcc -fPIC -D_REENTRANT -I/usr/java/jdk1.6.0_31/include -I/usr/java/jdk1.6.0_31/include/linux -c Hello.c
  2 gcc -shared Hello.o -o libgoodluck.so

此时就生成了libgoodluck.so

注意为了让java找到此so,运行:export LD_LIBRARY_PATH=.,将当前目录加入此环境变量。

然后运行java Hello,好屏幕上打出了10.

然后测试下传入String型的参数,对应的jni定义应为jstring,但却出了些问题,在显示结果时仿佛内存溢出的样子。

后来查了查,需对jstring和char *作一个转换,如代码中所示,然后结果就正常。

linux下java调用.so文件的方法1: JNI的更多相关文章

  1. linux下java调用.so动态库方法2: JNA

    摘自:http://blog.csdn.net/todorovchen/article/details/21319033 另请参见: http://blog.sina.com.cn/s/blog_8c ...

  2. linux下java调用C

    linux下java调用C 分类: linux2012-05-22 09:12 1529人阅读 评论(0) 收藏 举报 javalinuxmakefilegccclasscommand 下面是在ubu ...

  3. java调用删除文件的方法删除文件,却删除不干净

    场景: 程序中在做数据下载时,生成了一个临时文件夹.夹子里面有一些txt和其他格式文件. 数据下载完毕后,需要删除这个临时文件夹,但是一直删除不干净,总会有一下文件残留. 网搜到了这个问题的原因: 内 ...

  4. linux下python调用.so文件

    前言 使用python 调用Fanuc的动态链路库.so 文件读取数据 环境要求 环境 需求 ubuntu16.04 32位 python3.5 32位 配置 把so文件添加到默认路径 ln -s / ...

  5. linux下查看mysql日志文件的方法

    查看mysql日志方法: mysql默认不允许我们查看日志.需要更改一些设置 1 vi 更改配置文件 允许用户查看日志文件 sudo vi /etc/mysql/mysql.conf.d/mysqld ...

  6. linux下通过vim编辑文件的方法

    一般来说是通过指令进入文件的编辑页面: vi [filename] 此时进入的是一般指令模式,然后可以直接移动光标对内容进行修改. 修改完成后,使用Esc 按键退出编辑模式. 此时回到的还是一般指令模 ...

  7. Linux下Java运行.class文件,报错找不到或无法加载主类

    classpath配置的错误,所以找不到.class文件. 原先的etc/profile中的classpath配置 export CLASSPATH=$JAVA_HOME/lib/tools.jar ...

  8. windows和linux环境下java调用C++代码-JNI技术

    最近部门做安卓移动开发的需要调C++的代码,困难重重,最后任务交给了我,查找相关资料,没有一个教程能把不同环境(windows,linux)下怎么调用说明白的,自己在实现的过程中踩了几个坑,在这里总结 ...

  9. Linux下java进程CPU占用率高分析方法

    Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...

随机推荐

  1. sudo nopasswd

    preface,不问头条,但汝读荐,诚意满满的!

  2. 沙湖王 | 用K-均值聚类给女明星们的身材分分类

    沙湖王 | 用K-均值聚类给女明星们的身材分分类 http://www.shahuwang.com/2012/07/21/%E7%94%A8scipy%E5%AE%9E%E7%8E%B0k-means ...

  3. 新建一个MVCProject 项目

    App_Data文件夹用于存放数据库文件的 App_Start文件夹用于存放Web应用程序启动时需要进行重要配置的类文件 Content 文件夹用于存放主题样式文件 Controllers 文件夹用于 ...

  4. IOS6和IOS7 显示一样的SearchBar

    if (isIOS7) { mySearchBar=[[UISearchBar alloc]initWithFrame:CGRectMake(, , , )]; mySearchBar.autocor ...

  5. iOS之Swift语言的学习

    好久都没有来这个熟悉而又陌生的地方啦, 想想已经有两三个月了吧,不过我相信以后还是会经常来的啦,因为忙碌的学习已经过去啦,剩下的就是要好好的总结好好的复习了,好好的熟悉下我们之前学习的知识点,将他们有 ...

  6. C#几种截取字符串的方法小结 (摘抄)

    1.根据单个分隔字符用split截取 例如 string st="GT123_1"; string[] sArray=st.split("_"); 即可得到sA ...

  7. asp.net断点续传技术---下载(转)

    断点续传的原理 在了解HTTP断点续传的原理之前,先来说说HTTP协议,HTTP协议是一种基于tcp的简单协议,分为请求和回复两种.请求协议是由客户机(浏览器)向服务器(WEB SERVER)提交请求 ...

  8. AJAX 控件集之TextBoxWatermark(水印文本框)控件

    功能:       可以让TextBox控件初始化的时候拥有水印文字.属性:    TargetControlID :要使用具有水印效果的TextBox控件ID.    WatermarkCssCla ...

  9. alarm函数可以定时

    貌似是可以的,不过感觉好像这样用不是很好,最好还是用回timer_settimer一些列函数吧,不过既然开了头,就看下alarm怎么用吧. 1. 所需头文件  #include<unistd.h ...

  10. hdu1215七夕节

    Problem Description 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!" ...