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
codice:
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");
}
}
}
la classe HelloWorld.c
codice:
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}
poi chiamo
1: javac HelloWorld.java
2: javah -jni HelloWorld
e tramite shell di VisualBasic
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
dopodiche se chiamo java HelloWorld mi da errore, allora ho provato ad iserire librerie come da più parti scritto, e quindi:
codice:
set LD_LIBRARY_PATH=C:\Users\antonio\Desktop\exampleOfJni
(anche su linux è lo stesso, li con il comando export LD_LIBRARY_PATH=/home/antonio/Desktop/exampleOfJni tutto si risolve)
quindi dopo di questo chiamo
codice:
java -Djava.library.path=. HelloWorld ma anche java HelloWorld
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 con
echo %LD_LIBRARY_PATH%
ottengo
C:\Users\antonio\Desktop\exampleOfJni
posto in ultimo e ovviamente l'errore:
codice:
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)
cercasi aiutooooo
e grazie in anticipo....
Antonio