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
Coba pake JNA aja om https://jna.dev.java.net/
ReplyDeleteGak perlu nulis code pake C/CPP lagi
sayang sekali jna cuma buat windows
ReplyDeleteDi situ si tertulis gak cuma untuk windows.
ReplyDeletehttps://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).