Salve a tutti!
premessa, sono su windows e ho la necessità che il programma funziona li, mentre gira su Linux.
Allora, ho delle funzioni C che vengono chiamate da Java, per questo uso JNI. L'esempio in questione è il classico HelloWorld per cui ho:
1) classe HelloWorld.java
la classe HelloWorld.ccodice:class HelloWorld { private native void print(); public static void main(String[] args) { new HelloWorld().print(); } static { try { System.loadLibrary("HelloWorld"); System.out.println("ok"); } catch(Exception e) { System.out.println("erroreeeeeeeeeeeee"); } } }
poi chiamocodice:#include <jni.h> #include <stdio.h> #include "HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj) { printf("Hello World!\n"); return; }
1: javac HelloWorld.java
2: javah -jni HelloWorld
e tramite shell di VisualBasic
dopodiche se chiamo java HelloWorld mi da errore, allora ho provato ad iserire librerie come da più parti scritto, e quindi:codice:cl -I"c:\Program Files\Java\jdk1.6.0_06\include" -I"c:\Program Files\Java\jdk1.6.0_06\include\win32" -MD -LD HelloWorld.c -FeHelloWorld.dll
(anche su linux è lo stesso, li con il comando export LD_LIBRARY_PATH=/home/antonio/Desktop/exampleOfJni tutto si risolve)codice:set LD_LIBRARY_PATH=C:\Users\antonio\Desktop\exampleOfJni
quindi dopo di questo chiamo
e ottengo lo stesso identico errore che otterei in linux senza chiamata ad "export" e qui prima di set LD_LIBRARY etc. Ho anche inserito la cartelal dell'esempio nel path e nulla. Inoltre concodice:java -Djava.library.path=. HelloWorld ma anche java HelloWorld
echo %LD_LIBRARY_PATH%
ottengo
C:\Users\antonio\Desktop\exampleOfJni
posto in ultimo e ovviamente l'errore:
cercasi aiutooooocodice:Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Users\antonio\Desktop\exampleOfJni\HelloWorld.dll: Can't find dependent libraries at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(Unknown Source) at java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source) at java.lang.System.loadLibrary(Unknown Source) at HelloWorld.<clinit>(HelloWorld.java:12)
e grazie in anticipo....
Antonio

Rispondi quotando