Linux下Java JNI起步

1. 创建JniTest.java:


public class JniTest {
    static {
        System.loadLibrary("hello");
    }


    public native void say();


    public static void main(String[] args) {
        System.out.println("I'm in Java");
        new JniTest().say(); 
    }
}

2.编译JniTest.java并生成Native头文件:

javac JniTest.java 
javah -jni JniTest

3. 根据JniTest.h中的函数原型,创建hello.c文件:


#include <stdio.h>

#include "JniTest.h"

JNIEXPORT void JNICALL Java_JniTest_say(JNIEnv *env, jobject obj)
{
    printf("I'm in c/c++\n");
}

4. 为方便编译,生成一个Makefile文件:

Makefile:
.PHONY: all

all:

        javac JniTest.java

        gcc --shared -I /usr/lib/jvm/java-6-openjdk-i386/include hello.c -o libhello.so


5. 编译make,并执行:

java -Djava.library.path=. JniTest


注:如不指明libray路径,将报错:

[ancoo@ubuntu jnitest]$ java JniTest 
Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
        at java.lang.Runtime.loadLibrary0(Runtime.java:823)
        at java.lang.System.loadLibrary(System.java:1028)
        at JniTest.<clinit>(JniTest.java:4)
Could not find the main class: JniTest.  Program will exit.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值