Znacznie efektywniejszym sposobem jest użycie metod natywnych. Dodatkowo możemy używać metod natywnych żeby przyspieszyć działanie aplikacji pisanych w Javie. Implementacje metod natywnych zademonstruje na prostym przykładzie, który mam nadzieje zachęci Was do zglebienia bardziej szczegółowych informacji odnośnie tego tematu.
Na początku musimy napisać kod w Javie, implementujemy prosta klasę
listing HelloWorld.java
class HelloWorld { public native static void print(); static { System.loadLibrary("HelloWorld"); } public static void main(String[] args) { print(); } }
Kod nie jest skomplikowany, wywołujemy natywna metodę print. Niżej w statycznym bloku ładujemy bibliotekę HelloWorld.
Następnie kompilujemy nasz kod:
$ javac HelloWorld.java
Kolejnym krokiem jest stworzenie pliku nagłówkowego HelloWorld.h, nie musimy jednak tworzyć tego sami.
Polecenie:
$ javah HelloWorld
wykona to za nas.
Oto listing pliku 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: print * Signature: ()V */ JNIEXPORT void JNICALL Java_HelloWorld_print (); #ifdef __cplusplus } #endif #endif
Teraz możemy przystąpić do napisania naszej biblioteki w C
listing pliku HelloWorld.c
#include "HelloWorld.h" #include <stdio.h> JNIEXPORT void JNICALL Java_HelloWorld_print() { printf("Hello World! \n"); }
Nazwę funkcji kopiujemy z pliku nagłówkowego.
Kompilacje wykonujemy za pomocą polecenia:
$ gcc -fPIC -I jdk/include -I jdk/include -shared -o libHelloWorld.so HelloWorld.c
gdzie jdk to ścieżka do katalogu w którym znajduje się JDK, w moim przypadku wygląda to tak:
$ gcc -fPIC -I /usr/lib/jvm/java-6-sun-1.6.0.15/include
-I /usr/lib/jvm/java-6-sun-1.6.0.15/include -shared -o libHelloNative.so HelloNative.c
Nadszedł czas by sprawdzić działanie naszego programu. Ale wcześniej musimy jeszcze skonfigurować zmienną środowiskową:
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH
i test działania:
$ java HelloWorld
Hello World!
Oczywiście metody natywne mogą przyjmować parametry czego akurat nie pokazałem w przykładzie, ale nie jest to takie trudne. Zachęcam do zainteresowania się metodami natywnymi, w internecie można znaleźć wiele informacji na ten temat. Pozwoli Wam to znacznie rozszerzyć możliwości Waszych programów np. poprzez wykorzystanie sterowników.
Brak komentarzy:
Prześlij komentarz