Linux下JNI的简单使用---第一个helloworld程序

一、环境介绍

VMwareWorkstation9.0 + RedHat5.1Enterprise + jdk1.7.0

二、第一个使用JNI的hello程序步骤

1、编写一个使用jni调用的简单Java程序

package org.bt.test
public class HelloJni {
            private native String getHello(); //申明本地函数
            //加载共享库
            static {
                        System.loadLibrary("bigtree");
            }
 
            public static void main(String[] args) {
                        Strig str = new HelloJni().getHello(); //调用本地函数
                        System.out.println("message from jni: " + str);
            }           
}

其中用native修饰的函数由C实现,并且制作成共享库,因此要提前使用静态代码块加载共享库,其中加载的共享库名字不包含lib头和.so尾

2。编译Java文件,生成.class字节码文件

javac -d . HelloJni.java

编译完成后将生成包目录以及.class文件

3.使用javah命令对包含native函数的.java文件生成本地函数的头文件,注意要在包目录的根目录下进行

javah  org.bt.test.HelloJni

其中org.bt.test为包名,HelloJni为Java文件的名字,不包含后缀,成功后将在本目录下生成一个

包名_文件名.h  如:org_bt_test_HelloJni.h

4.包含此头文件,编写c代码,实现本地函数

#include "org_bt_test_HelloJni.h"
 
JNIEXPORT jstring JNICALL Java_org_bt_test_HelloJni_getHello(JNIEnv *env, jobject obj) {
          jstring str = (*env)->NewStringUTF(env, "hello world!");
          return str;
}

其中函数原型在头文件中已经用javah生成了,只需实现即可,此函数将给Java程序返回一个helloworld!字符串。注意:.h文件和.c文件在同一个目录下,c文件名任意取

5.编译c代码,制作成共享库

gcc -fPIC  -I /usr/java/jdk1.7.0_51/include/ -I /usr/java/jdk1.7.0_51/include/linux/ -shared -o libbigtree.so hello.c

-fPIC 制定编译成与路径无关的

-I 制定要搜索的头文件的路径

-shared 制定生成共享库

-o 制定输入文件名字,其中lib开头,.so结束,中间的名字就是Java程序中加载的共享库使用的名字,两者必须一致

hello.c即为要制作成共享库的c代码

6、修改环境变量LD_LIBRARY_PATH,使系统能知道在哪里加载自己制作的共享库的路径,这里简单起见,就设置为当前路径

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

linux下用冒号分隔,这种修改方法只是当时有效,重启系统后就没有效了,要想一直都有效,就的修改配置文件,一般修改/etc/profile
7.运行Java程序

java org/bt/test/HelloJni

成功后将打印出message from jni: hello world!

时间: 2024-10-24 10:51:17

Linux下JNI的简单使用---第一个helloworld程序的相关文章

在Linux最小系统上编译运行第一个helloworld程序

一.安装和使用SSH软件 1.安装SSH 软件 1)SSH 软件压缩包可以在网盘下载,下载后解压,进入解压出来的文件夹,如下图. 2)单击上图中的“SSHSecureShellClient-3.2.9.exe”,开始安装 3)如下图,生成桌面图标. 1.使用SSH 软件传文件 1)进入虚拟机的Ubuntu 系统,使用ifconfig 命令,确定Ubuntu 的IP 地址.如下图所 示,用户的IP 地址,需要自己确认,这里只是以本机的IP 为例. 2)双击快捷方式“SSH Secure File 

Linux下使用pdb简单调试python程序

python自带调试工具库:pdb # -*- coding:utf-8 -*- def func(num): s = num * 10 return s if __name__ == '__main__': print 'debug starting...' print '*' * 10 print 'debug ending-' num = 100 s = func(num) print s 在python文件中不引用pdb库,可以在执行python文件的时候,加上参数: python -m

Linux下别名alias设置(输入一个别名即可打印日志)

在Linux环境下,经常需要查看后台web日志,每次都要cd.很麻烦. 查看日志的时候,能否不用这么多cd呢?答案是能.方法如下: 步骤1:   vi  .profile 步骤2:在文件末尾增加别名showLog alias showLog='tail -100f  /pboss/iom/domain/iom/log.log' 保存文件.profile 步骤3:linux下,输入showLog,即可显示日志信息 总结:到此为止,大功告成.勉励自己继续积累吧 Linux下别名alias设置(输入一

Linux 下基于多线程服务器/客服端聊天程序源码

Linux 下基于多线程服务器/客服端聊天程序,采用阻塞的socket技术,和多线程技术实现. 客服端程序:client.c #include<stdio.h> #include<stdlib.h> #include<string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/ip.h>

【java】 linux下利用nohup后台运行jar文件包程序

Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 java -jar XXX.jar & &代表在后台运行. 特定:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行. 继续改进,如何让窗口关闭时,程序仍然运行? 方式三 nohup java -jar XXX.jar & nohup 意思是不挂断运行命令,当账户退出或终端关闭时,

mybatis 的第一个 HelloWorld 程序学习

1.准备工作: a.在 MYSQL 中新建一个 mybatis 数据库,并且创建一个 table,在这个表格中录入一条记录. 注:我使用的是 SQLyog,你们也可以使用命令行直接创建库和表. 2.在 eclipse 中创建一个 java 工程: - 创建一个名为 Employee 的 bean 类,并且在这个工程的路径下创建一个 lib 文件夹,用于存放需要的 jar 包. (需要的 jar 包为 mybatis-3.4.1.jar .mysql-connector-java-5.1.37-b

Node.js入门以及第一个helloworld程序

1.概念:简单的说 Node.js 就是运行在服务端的 JavaScript.学之前需要明白Node.js是无法挑战jsp.php或者asp这种老牌网站的地位的,是永远不会出现在证券.金融这种领域的.node.js的出现,就像是思维的极限反转带来的性能极致,它就像是一个玩具一样,如果把传统的jsp必做战斗机的话,那么node.js就是一个无人机! 2.Node.js的三大特性 单线程 事件驱动 非阻塞I/O Node.js的这三个特性,缺一不可,正是这些特性导致他的性能高效.当别人考虑如何进行服

SpringMVC基础入门,创建一个HelloWorld程序

ref:http://www.admin10000.com/document/6436.html 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!--configure the setting of springmvcDispatcherServlet and configure the ma

springboot之搭建第一个helloworld程序

1.下载基本框架 在网站:https://start.spring.io/ 全部默认,基本没有改动 选择依赖,当然也可以自己在pom.xml加,我们直接在这里选择. 只选择Spring Web Starter(可以了解下,Lombok,在写实体时很方便) 点击Generate the project -Ctrl + 将会下载生成demo.zip 2.Maven安装依赖 解压demo.zip 在demo目录打开命令行工具(在demo目录下,按住shift键,同时点击鼠标右键,点击“在此处打开Pow