xp&linux下JNI使用简例(二)

 示例2linux下的例子 JNI SO

Linuxjava通过JNI方法调用so,编写代码的过程与windows下一模一样,只不过编译过程有所区别,尤其注意,要将编好的so文件路径加入java工程或程序的library参数中,否则会提示找不到这个库文件(原理与windows下添加lib directory一样^_^

 

注:也可以用eclipse辅助开发,自己做的时候没有这么做:)

 

1.编辑java文件如下:                                                                      

public class testso {

    static {

        System.loadLibrary("testc");  //这里项目显示为:libtestc.so,只需要填实际的名字,

                          //前后缀可以不填,linux会自动查找libtestc.so

    }

    public native static int get();

    public native static void set(int i);

   

    public static void main(String[] args){

        testso t = new testso();

        t.set(10);

        System.out.println(t.get());

    }

}

2.在终端或者用eclipse编译testso.java文件(javac testso.java)生成相应的class文件testso.class

3.同理用javah testso.class文件生成testso.h文件。其中.h文件内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include <jni.h>

#ifndef __testso__

#define __testso__

#ifdef __cplusplus

extern "C"

{

#endif

JNIEXPORT jint JNICALL Java_testso_get (JNIEnv *env, jclass);

JNIEXPORT void JNICALL Java_testso_set (JNIEnv *env, jclass, jint);

#ifdef __cplusplus

}

#endif

#endif /* __testso__ */

 4.编辑c文件,内容如下:

或者:建一个c工程,注意项目类型为Shared Library.然后建立一个c文件,把test.h文件拷贝到c工程项目下,方便找到!

#include"testso.h"

int i=0;

JNIEXPORT jint JNICALL Java_testso_get (JNIEnv *env, jclass jc){ 

    return i;

}

 

JNIEXPORT void JNICALL Java_testso_set (JNIEnv *env, jclass jc, jint j){ 

    i=j;

}

5.命令行编译此文件为so格式!

gcc -fPIC -shared -o libtestc.so testc.c

 

6.在运行testso.java时,要添加好运行环境(其中注意variable不能随便填!):

否则会提示说在javalibrary.path下找不到你要调用的那个solibtestc.so

 

有三种方法:

1、命令行:

Shell方式:#set  //查看当前所有的环境变量

                     #export   LD_LIBRARY_PATH=你的so文件所在的路径

这种方法只能在当前shell有用,也就说作用是暂时的。

 

2、写入linux配置文件:

#vi /etc/profile

在该文件最后加上export   LD_LIBRARY_PATH=你的so文件所在的路径

(需要重启后生效?)

 

3、在eclipse,点击run--->Environment里面点击new新建--->variable填:LD_LIBRARY_PATH  ----->value填:so文件所在目录,这里为:/home/alen/workspace/testc/Debug

 

7.最后运行java文件,显示10!恭喜你,成功了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值