Shared Libraries amb Java
Salta a la navegació
Salta a la cerca
Vull fer l'exemple mínim (HelloWorld) per crear una llibreria compartida (shared library, .so) amb C, i que la pugui utilitzar amb Java.
Aquest és el cas que es dóna amb MidiShare, que està escrit amb C++ però que es pot utilitzar amb Java gràcies a la shared library libJMidi
Segueixo el tutorial http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/stepbystep/index.html
Explicació de Shared Libraries: http://www.network-theory.co.uk/docs/gccintro/gccintro_25.html
Contingut
Step 1: Write the Java Code
HelloWorld.java:
class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
}
Main.java:
class Main {
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
Step 2: Compile the Java Code
Ho he fet amb l'Eclipse. En el directori bin/ es crea HelloWorld.class i Main.class
Step 3: Create the .h File
$ cd /home/joan/workspace/Shared_Library/bin/ $ javah -jni HelloWorld
i es crea el fitxer HelloWorld.h:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);http://www.network-theory.co.uk/docs/gccintro/gccintro_25.html
#ifdef __cplusplus
}
#endif
#endif
Step 4: Write the Native Method Implementation
HelloWorldImp.c:
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
Creem la shared library:
$ gcc -shared -Wall -I/usr/lib/jvm/java-6-sun/include -I/usr/lib/jvm/java-6-sun/include/linux HelloWorldImp.c -o libhello.so
Step 6: Run the Program
i executem l'aplicació:
$ java -Djava.library.path=/home/joan/workspace/Shared_Library/bin/ Main
creat per Joan Quintana Compte, maig 2009