Shared Libraries amb Java

De Wikijoan
Dreceres ràpides: navegació, 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;
}

Step 5: Create a Shared Library

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

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines