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

之前做过一个项目有用到过JNI,最初也是各种不懂,经过自己的不断摸索,开始有了眉目,知道的了怎么使用。我是有在Linux和windows平台都用了JNI,在这里简单分享以下在Linxu平台上开发用了JNI的简单步骤和小demo。楼主亲测可用,要是有不对的地方,欢迎指正! 之前写了一遍windows平台上一个demo


Linux 平台上的项目使用jni called so library

1. 在eclipse中新建一个项目 JAVA Project 或者Web Project都可以,在src下在com.hailee.util 包中新建一个Hello.java类

package com.hailee.util;

public class Hello{

public native static int add(int x,int y);

static {

System.load("/home/hailee/main.so");  //以绝对路径加载so文件  

  }

public static void main(String[] args){  

       System.out.println(add(1,1));    

}

}

2. 在Linuxterminal/home/hailee/下新建一个Hello.java类  内容如上一致。

 

3. 在Hello.java路径下编译java代码  也就是/home/hailee

javac -d . Hello.java

 

 

Ø 命令解释:-d:表示生成目录,生成的目录以package的定义为准;
.:表示在当前所在文件夹中生成

4. 查看生成的文件和目录

ls –al

 

Ø 此时会生成com.hailee.util目录

5. 生成.h头文件

/home/hailee路径生成.h文件

javah com.hailee.util.Hello

6. 编写实现add 方法的C代码

vim hello.c

代码如下:

#include<stdio.h>

#include "sf_gg_Hello.h"

 

JNIEXPORT jint JNICALLJava_sf_gg_Hello_add(JNIEnv *env, jclass jc, jint x, jint y){

    return x+y;   //简单的加法

}

7. 编译成so文件

/home/hailee的路劲下编写Makefile文件,内容如下

CC= gcc

SHARED=-shared

SOURCE= Hello.c

LIBS= -I/usr/java/jdk1.7.0_79/include -I/usr/java/jdk1.7.0_79/include/linux

SONAME=main.so

default:

$(CC) -fPIC $(LIBS) -o $(SONAME) $(SHARED) $(SOURCE)

8. 运行so文件

java sf.gg.Hello


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值