Wednesday, October 07, 2009

mencoba pakai jni

berikut akan saya posting cara untuk membuat helloworld program untuk java native interface

pertama-tama buat file HelloWorld.java
--start--
public class HelloWorld {
private native void print();
public static void main(String[] args) {
new HelloWorld().print();
}
static {
System.loadLibrary("HelloWorld");
}
}
--end--

lalu compile dengan

$ javac HelloWorld.java

maka akan menghasilkan HelloWorld.class


buat file header dengan perintah

$ javah HelloWorld

maka akan menghasilkan file HelloWorld.h yang isinya seperti berikut:
(harap file ini jangan diapa2in)

--start--
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
--end--

nah, di file inilah terdapat 'kontrak' yang harus dipenuhi oleh program bahasa c/cpp untuk nantinya mengimplementasikan fungsi yang diperlukan yaitu fungsi print


buat file HelloWorld.c

--start--
#include
#include
#include "HelloWorld.h"

JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
int i;
for(i=0;i<10;i++)
{
printf("Hello World!\n");
}
return;
}
--end--


compile HelloWorld.c dengan

$ gcc --shared -o libHelloWorld.so -I /usr/lib/jvm/java-6-sun/include/ -I /usr/lib/jvm/java-6-sun/include/linux/ HelloWorld.c /usr/lib/jvm/java-6-sun/jre/lib/i386/server/libjvm.so


(harap sesuaikan dengan sistem anda, saya sendiri menggunakan ubuntu 9.04, sun-java6)

setelah di compile maka akan menghasilkan file libHelloWorld.so

yang nantinya akan di load oleh program java anda, lalu program java akan memanggil fungsi print

coba kita jalankan

$ java -Djava.library.path=. HelloWorld


seharusnya akan memanggil fungsi yang diimplementasikan di HelloWorld.c
dan menghasilkan tulisan Hello World! di layar.


gutlak

3 comments:

  1. Coba pake JNA aja om https://jna.dev.java.net/
    Gak perlu nulis code pake C/CPP lagi

    ReplyDelete
  2. sayang sekali jna cuma buat windows

    ReplyDelete
  3. Di situ si tertulis gak cuma untuk windows.

    https://jna.dev.java.net/servlets/ProjectDocumentList?folderID=11817&expandFolder=11817&folderID=0

    JNA library. This is the only file you need for standalone applications. Includes support for OSX (ppc/x86/x86_64), Linux (x86/amd64), Windows (x86/x86_64), Solaris (x86/amd64/sparc/sparcv9), and freeBSD (x86/amd64).

    ReplyDelete