Hi Community,
ich bastle gerade an einer Software, die mir Systemdaten (in dem Beispiel hier die Systemzeit) per JNI/C liefert und ich sie dann in Java ausgebe, wobei ich mir JNI mit Swig erstellen lasse. Ich arbeite auf Ubuntu 10.10.
Vorgehensweise:
Ich habe 2 Eclipse, eines für C, eines für Java. Als erstes habe ich ein "Shared Library Empty Project" erstellt, die C Sourcefile und danach die .i Datei, in der ich die Funktionen für Swig festlege, welche Java zugänglich gemacht werden sollen, geschrieben. Anschließend habe ich noch unter Project/Properties/C-C++ Build/Settings/GCC C Compiler/includes die openjdk includes hinzugefügt ("/usr/lib/jvm/java-6-openjdk/includes/linux" und nochmal ohne linux). Dann habe ich das ganze C Projekt gebuildet, dadurch wurden mir die *.o und die .so erstellt. Gut, nun habe ich im anderen Eclipse meine Java Anwendung geschrieben und die .java in den Debug Ordner des C Projekt verschoben (in dem auch die .so liegt). Anschließend noch javac gemacht und dann versucht, auszuführen.
Folgende Fehlermeldung:
Hier meine Dateien:
JNIJavaTester.java
Bei example.get_time() greife ich auf die Java Klasse zu, die mir Swig erstellt hat. Diese liegt auch im C Debug Verzeichnis.
example.c
example.i
Ich habe nun schon seit Stunden herumgespielt aber immer wieder bekomme ich die selbe Fehlermeldung.
Habt ihr irgendwelche Ideen?
danke schonma, greez
ich bastle gerade an einer Software, die mir Systemdaten (in dem Beispiel hier die Systemzeit) per JNI/C liefert und ich sie dann in Java ausgebe, wobei ich mir JNI mit Swig erstellen lasse. Ich arbeite auf Ubuntu 10.10.
Vorgehensweise:
Ich habe 2 Eclipse, eines für C, eines für Java. Als erstes habe ich ein "Shared Library Empty Project" erstellt, die C Sourcefile und danach die .i Datei, in der ich die Funktionen für Swig festlege, welche Java zugänglich gemacht werden sollen, geschrieben. Anschließend habe ich noch unter Project/Properties/C-C++ Build/Settings/GCC C Compiler/includes die openjdk includes hinzugefügt ("/usr/lib/jvm/java-6-openjdk/includes/linux" und nochmal ohne linux). Dann habe ich das ganze C Projekt gebuildet, dadurch wurden mir die *.o und die .so erstellt. Gut, nun habe ich im anderen Eclipse meine Java Anwendung geschrieben und die .java in den Debug Ordner des C Projekt verschoben (in dem auch die .so liegt). Anschließend noch javac gemacht und dann versucht, auszuführen.
Folgende Fehlermeldung:
Code:
greg@ubuntu:~/Software/Eclipse_C/workspace/Swigtestc/Debug$ java JNIJavaTester
Exception in thread "main" java.lang.UnsatisfiedLinkError: no libSwigtestc in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681)
at java.lang.Runtime.loadLibrary0(Runtime.java:840)
at java.lang.System.loadLibrary(System.java:1047)
at JNIJavaTester.main(JNIJavaTester.java:11)
Hier meine Dateien:
JNIJavaTester.java
Java:
public class JNIJavaTester {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//System.setProperty("java.library.path", "/home/greg/Software/Eclipse_C/workspace/Swigtestc/Debug");
System.loadLibrary("libSwigtestc");
System.out.println(example.get_time());
}
}
example.c
Code:
#include <time.h>
double VAR = 3.0;
int fact(int n){
if(n<=1) return 1;
else return n*fact(n-1);
}
int my_mod(int x, int y){
return (x%y);
}
char *get_time(){
time_t ltime;
time(<ime);
return ctime(<ime);
}
example.i
Code:
%module example
%{
extern double VAR;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
%}
extern double VAR;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
Ich habe nun schon seit Stunden herumgespielt aber immer wieder bekomme ich die selbe Fehlermeldung.
Habt ihr irgendwelche Ideen?
danke schonma, greez