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文件,生成对应的.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语言代码实现并返回的。

linux java调用so文件路径_Linux平台Java调用so库-JNI使用例子相关推荐

  1. c 调用matlab文件路径,C/C++下调用matlab函数操作说明

    1.matlab的安装 连接:http://pan.baidu.com/s/1qXuF7aO 安装32位版本的matlab(在目录下bin文件夹中有两个文件夹,选择win32文件夹下的setup进行安 ...

  2. Linux下的ELF文件、链接、加载与库(含大量图文解析及例程)

    Linux下的ELF文件.链接.加载与库 链接是将将各种代码和数据片段收集并组合为一个单一文件的过程,这个文件可以被加载到内存并执行.链接可以执行与编译时,也就是在源代码被翻译成机器代码时:也可以执行 ...

  3. 【Linux后端开发必问】操作系统系列(Linux常用命令、文件权限修改、静态与动态库的制作)

    目录 一.说说常用的Linux命令 二.文件权限如何修改 三.静态库和动态库的制作 1.静态库 2.动态库的制作 3.两者优势对比 一.说说常用的Linux命令 1.cd命令:用于切换当前目录: 2. ...

  4. Linux平台Java调用so库-JNI使用例子

    1.确保gcc编译器已安装 2.编写HelloJNI.java代码,用native声明需要用C实现的函数. 如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如/home/swan/ ...

  5. Java 获取linux根目录下的文件夹_Linux使用

    Liunx使用 命令管道连接 | 命令管道符合为|,可以将两个命令进行连接,连接后第一个命令的输出结果作为第二个命令的输入信息 比如 ls /ect | more -10 分屏显示etc文件夹下的10 ...

  6. java 字符串 转 文件路径_连接用户输入字符串转换为完整的文件路径(Java)

    我写了一个简短的脚本来创建一个文件到我的桌面,文件出现了 . 我只是在main中完成了所有操作,如下所示: import java.io.*; import java.util.Scanner; pu ...

  7. Java读取resource文件/路径的几种方式

    方式一: String fileName = this.getClass().getClassLoader().getResource("文件名").getPath();//获取文 ...

  8. java 运行os文件路径_Java获取文件路径的几种方式

    关于绝对路径和相对路径: 绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:xyz est.txt 代表了test.txt文件的绝对路径. http://www.su ...

  9. java 遍历属性文件路径_Java项目中读取properties文件,以及六种获取路径的方法...

    Java读取properties文件的方法比较多,网上最多的文章是"Java读取properties文件的六种方法",但在Java应用中,最常用还是通过java.lang.Clas ...

最新文章

  1. 删除highcharts.com点数链接
  2. 面试准备系列01----面试中的链表题目汇总
  3. php中怎么过滤器_PHP 过滤器
  4. jsf集成spring_Spring和JSF集成:分页
  5. 上周热点回顾(6.5-6.11)
  6. Paxos共识算法详解
  7. Python爬虫爬取微博热搜保存为 Markdown 文件
  8. 摄氏度和开氏度的换算_开氏度和摄氏度
  9. 为什么国外客户愿意把软件交给印度人来做?
  10. 计算N阶行列式的详细讲解(C语言)(降阶法)(函数递归)
  11. Borůvka算法学习小记
  12. 快速批量移除B站粉丝,解放双手!
  13. 关于使用KEIL建立STM32项目(附带建立好的工程以及注意事项)
  14. Qt知识点梳理 —— 静态函数发送信号
  15. 画彩色斐波那契螺旋线
  16. 计算机代码画玫瑰,如何用代码画一朵玫瑰花
  17. 微信小程序汇率计算界面
  18. 搜索引擎的爬虫技术研究
  19. [软考]之原码、反码、补码和移码
  20. (原创)C# LRC复读机-1

热门文章

  1. SAP CRM几个常用的使用技巧
  2. abap 字符串处理
  3. ABAP中接收.NET语言byte[]类型返回值问题
  4. 0x00000000指令引用的内存不能为written_「深入Java虚拟机」Java内存区域与内存溢出...
  5. amd核芯显卡控制面板自定义分辨率_玩家 | 独立显卡和核芯显卡哪个更香?
  6. php管道邮件,php进程通信-PIPE管道通信
  7. tomcat中间件的默认端口号_等保2.0涉及的Apache Tomcat中间件(下)
  8. 把图片做成html,HTML5实践-图片设置成灰度图
  9. 在python函数中参数分类的详细教程
  10. python中os.path.isdir()等函数的作用和用法