摘自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. LVM(1)

    DM: DM: Device Mapper    逻辑设备        RAID, LVM2        DM: LVM2    快照    多路径

  2. Linux下高效数据恢复软件extundelete应用实战

    作为一名运维人员,保证数据的安全是根本职责,所以在维护系统的时候,要慎之又慎,但是有时难免会出现数据被误删除的情况,在这个时候改如何快速.有效地恢复数据呢?本文我们就来介绍一下Linux系统下常用的几 ...

  3. hdu 4007 Dave(线性探查+枚举)

    Problem Description Recently, Dave is boring, so he often walks around. He finds that some places ar ...

  4. Smart ——jiaoyou模板

    <!--{foreach $vip_data as $key=>$volist}-->    <!--{if $key==0 ||$key==1||$key==5||$key= ...

  5. 平时的笔记02:处理fnmatch模块

    # Copyright 2006 Joe Wreschnig## This program is free software; you can redistribute it and/or modif ...

  6. Qt快速入门系列教程目录

    Qt快速入门系列教程目录

  7. samba服务器概述

    一.samba服务器概述 Samba是一个能让Linux系统应用Microsoft网络通信协议的软件.而SMB是Server Message Block的缩写,即为服务器消息块.SMB主要作为Micr ...

  8. JAVA设计模式-工厂模式(代码示例)

    结构 MySort.java 实际业务中我们可能会使用任意一种排序方法 package pers.zander.edu.arithmetic.sort; /** * 排序接口 * @author * ...

  9. EffectiveC#2--为你的常量选择readonly而不是const

    1.对于常量,C#里有两个不同的版本: 编译时常量--效率相比更高些,但可维护性不好,保留的目的是为了性能.const关键字申明 public const int _Millennium = 2000 ...

  10. RSA加密算法及其与SpringMVC集成

    如有不足,敬请各位提出批评,定会改正.THX! 本文介绍的是RSA加密算法+Spring Security在SpringMVC中的集成使用. Spring Security是什么? 引用: Sprin ...