2011-01-17 9 views
2

Bitte gehen Sie nicht ins Schwärmen, warum ich GJC nicht verwenden sollte, ich verstehe die Nachteile davon.GJC - ein externes Gefäß

Die Frage ist, kann ich eine kompilierte Bibliothek wie ein normales Glas verbinden?

// this works and links to the jarfiles.jar 
java -cp lib/jarfiles.jar:classes Main 

Aber ist ich das Glas zu nativem Code wie folgt drehen:

gcj -shared -fPIC -Wl,-Bsymbolic jarfiles.jar -o jarfiles.so 

und versuchen, es ruft die .so-Datei auszuführen:

java -cp lib/jarfiles.so:classes Main 

Es weht in der Lage, nicht zu finde die erwarteten Klassen.

Exception in thread "main" java.lang.NoClassDefFoundError: com/netxpect/FirstFromJar 
     at Main.<clinit>(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: com.netxpect.FirstFromJar 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 

Sollte das nicht funktionieren? Was mache ich falsch? Vielen Dank.

+0

ich wäre sehr überrascht sein/beeindruckt, wenn dies funktioniert. Gemeinsame Bibliotheken werden normalerweise zu java.library.path oder LD_LIBRARY_PATH hinzugefügt, aber ich weiß nicht, wie Sie sie mit gjc verwenden. –

Antwort

1

ich denke, es sollte sein:

1- gcj -shared -fjni jarfiles.jar -o libjarfiles-shared.so

2- put jarfiles.so in/usr/lib oder ähnlich (btw: Verzeichnis muss in LD_LIBRARY_PATH angegeben sein)

3- gcj -fjni Somefile.java --main=Somefile -ljarfiles-shared

4- LD_LIBRARY_PATH=/usr/lib/jni ./a.out

Verwandte Themen