1.确保gcc编译器已安装

2.编写HelloJNI.java代码,用native声明需要用C实现的函数。
如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如/home/swan/test/net/wangliping/HelloJNI.java

package net.wanglipingpublic 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语言代码实现并返回的。

原文转载:http://www.linuxidc.com/Linux/2010-08/27602.htm

java linux so相关推荐

  1. atitit.加入win 系统服务 bat批处理程序服务的法总结instsrv srvany java linux

    atitit.加入win 系统服务 bat批处理程序服务的法总结instsrv srvany  java linux 系统服务不同于普通视窗系统应用程式.不可能简简单单地通过执行一个EXE就启动视窗系 ...

  2. Java:Linux上java -jar xxx.jar命令执行jar包时出现Error: Invalid or corrupt jarfile xxx.jar解决方案

    Java:Linux上java -jar xxx.jar命令执行jar包时出现Error: Invalid or corrupt jarfile xxx.jar解决方案 参考文章: (1)Java:L ...

  3. java linux ping ip,java linux ping命令

    java linux ping命令 [2021-02-03 14:27:06]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(&qu ...

  4. java linux 字体设置_linux下面java字体的设置

    这两天碰到一个棘手的问题, 就是java的字体到了mac下面, 宋体不见了, 变成了simsun, 这个对应关系如何产生的呢? 先记下这个问题. 在Linux中,JAVA程序的中文默认可能不正常:或是 ...

  5. java linux mysql数据库_Linux Java连接MySQL数据库

    Linux(Ubuntu平台)Java通过JDBC连接MySQL数据库,与Windows平台类似,步骤如下: 解压 jdbc: tar -zxvf mysql-connector-java-5.1.1 ...

  6. java linux 起多个进程_linux下tomcat启动后出现多个java进程

    偶尔发现linux下tomcat启动后出现多个java进程,如下: 000 S     0  4789     1  0  85   0    - 75083 schedu pts/1    00:0 ...

  7. c 运行 java linux命令行参数,Linux下用命令行编译运行Java总结

    最近使用腾讯云的Cloud Studio写Java,只能使用命令行进行编译运行,趁此机会,学习一下Linux的一些常用命令.平时windows下IDE用习惯了,现在用命令行进行编译运行,发现其实问题还 ...

  8. java linux urlencode_java字符编码转换研究(转)

    1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...

  9. java linux 时区_java同步/设置Linux系统时间

    java设置/同步Linux系统时间 在网上看了很多,试了很多,不知道是他们的环境不同还是啥原因,很少成功 下面我就把我的测试成功的代码贴出来,让同行们少走弯路,如果实验不成功,可以给我留言 我帮助你 ...

  10. java linux文件夹大小_Linux_Linux文件夹大小查看办法, 1. du -sh查看当前文件 - phpStudy...

    Linux文件夹大小查看办法 1. du -sh 查看当前文件夹大小 如下: Info代码 $du -sh 7.0M    xxx.log $du -sh 7.0M    xxx.log 2. du ...

最新文章

  1. 任务队列,消息队列和rpc的区别是什么?
  2. Hyper-V 3 虚拟机快照之四 导入/导出快照
  3. rest-framework url控制
  4. OpenCV gapi模块OMZ文本检测的实例(附完整代码)
  5. android自定义url协议,Android自定义URL方案…?
  6. 记录发现的一个hiredis的bug
  7. alpine linux安装ftp,如何在Alpine Linux上安装GLPK?
  8. java web登录action_JavaWeb中登陆功能
  9. Blazor University (9)组件 — 代码生成 HTML 属性
  10. 博客园与我的第一次相遇
  11. Windows® Server 2003 SP1 Platform SDK Web Install
  12. java发送邮件工具类
  13. python zookeeper api_zookeeper java api介绍
  14. 哈希摘要、证书、对称密钥、公私密钥应用场景梳理
  15. Android系统音乐界面UI设计,40款音乐APP界面UI设计欣赏
  16. 12306一直显示服务器忙,网购春运火车票首日 12306网站又现服务器忙
  17. CVPR 2021 目标检测论文大盘点(65篇论文)
  18. 软件工程-软件开发的工程思维
  19. GitLab 在Linux LinuxMint(Untuntu ver)上的安装方法
  20. linux系统调用:exit()与_exit()函数详解【转】

热门文章

  1. Caffe学习系列(14):初识数据可视化
  2. 【死磕Java并发】-----Java内存模型之happens-before
  3. 如何实现一个分布式 RPC 框架
  4. 工业界 vs. 学术界: 一个年轻员工的视角
  5. 2016年科技阅读列表
  6. OpenCV之imgproc 模块. 图像处理(5)在图像中寻找轮廓 计算物体的凸包 创建包围轮廓的矩形和圆形边界框 为轮廓创建可倾斜的边界框和椭圆 轮廓矩 多边形测试
  7. Hadoop MapReduce的一些相关代码Code
  8. 42. Vue、React 等前端项目部署,刷新 404 问题解决方案
  9. python操作MYSQL数据库(2018-9-27)
  10. ftp安装和虚拟用户创建(终于搞清楚了)