Sie sind nicht angemeldet.

1

05.01.2010, 10:14

GNU Classpath 0.98 kompilieren

Hallo alle zusammen!

Also ich habe folgendes vor:

Ich bastel an einem kleinen Board rum auf dem ein Arm9 drauf ist und ein embedded Linux läuft. Letztendlich soll da drauf eine Java Virtual Machine laufen und einfache Java-Anwendungen ausführbar sein. Ich bitte darum nicht den Sinn von Java auf dem Board zu diskutieren - Danke! :)

Meine Suche dazu führte mich zur JamVM die den GNU Classpath nutzt. Folglich muss ich jetzt also neben der JamVM den GNU Classpath für mein Board crosscompilieren und hier kommt es zu einem Problem!
Ich hab von der Website die neuste Version 0.98 geladen, entpackt und die Configuration mit folgenden Parametern gestartet

Zitat

./configure --prefix=/targets/install/classpath/eprefix --exec-prefix=/targets/install/classpath/exec --disable-plugin --disable-jni --disable-alsa --disable-gjdoc --host=arm-linux-gnu --target=arm-linux-gnu CFLAGS=-I/usr/local/LxNETES-3/arm-linux/arm-linux/include LDFLAGS=-L/usr/local/LxNETES-3/arm-linux/arm-linux/lib CC=/usr/local/LxNETES-3/arm-linux/arm-linux/bin/gcc LIBS=-L/usr/local/LxNETES-3/arm-linux/arm-linux/lib


Das scheint auch ohne weiteres durchgelaufen zu sein (keine Fehler oder Warnungen die mir aufgefallen wären) und eine Makefile wurde erzeugt.

Nun also weiter mit dem Befehl make. Hier kommt es nun zu folgender Fehlermeldung:

Zitat


The_Collar@SuSE:/targets/classpath-0.98> make
Making all in lib
make[1]: Entering directory `/targets/classpath-0.98/lib' true top_builddir=.. top_srcdir=.. /bin/sh ./gen-classlist.sh standard
Adding java source files from srcdir '..'.
Adding java source files from VM directory ../vm/reference
ecj -warn:-deprecation,serial,unusedImport -J-Xmx768M -source 1.5 -target 1.5 -bootclasspath '' -classpath ../vm/reference:..:../external/w3c_dom:../external/sax:../external/relaxngDatatype:../external/jsr166:.:: -d . @classes
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.eclipse.jdt.internal.compiler.Compiler.handleInternalException(Compiler.java:561)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:498)
at org.eclipse.jdt.internal.compiler.batch.Main.performCompilation(Main.java:3543)
at org.eclipse.jdt.internal.compiler.batch.Main.compile(Main.java:1645)
at org.eclipse.jdt.internal.compiler.batch.Main.main(Main.java:1358)
make[1]: *** [compile-classes] Fehler 1 make[1]: Leaving directory `/targets/classpath-0.98/lib'
make: *** [all-recursive] Fehler 1
The_Collar@SuSE:/targets/classpath-0.98>


Offensichtlich ist irgendwo zu wenig Speicher verfügbar. Ok - ich hab nicht den leistungsstärksten PC hier, aber nach der Eingabe des Befehls free in die Konsole sehe ich das ca.. 400mb im RAM und 1,6GB im Swap noch frei sind. Ist das etwa nicht genug??

Ich bitte um eure Hilfe! Woran liegts? Was kann ich tun?
Ich muss noch hinzufügen das ich die Konfiguration versuchsweise ohne Parameter gestartet habe und daraufhin die selbe Fehlermeldung bekam! Es kann also nicht an einem Parameter liegen den ich gesetzt habe.

Mfg The-Collar

Mein PC:

System: openSUSE 11.1
KDE: 4.1.3
Betriebssystem: Linux 2.6.27.39-0.2-pae i686
Prozessor: Pentium 4 (3.2GHz)
RAM: 1GB

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »The-Collar« (05.01.2010, 10:19)


2

06.01.2010, 20:05

also, an zu wenig Speicher wird's kaum liegen......
Ich vermute mal ganz stark, auch nicht an dem classpath Programm selbst.

Ich tippe jetz einfach mal, dass der Compiler den Speicher wegen einer falschen Konfiguration oder sowas zum Überlaufen bringt. Ich würde es mit einem anderen Compiler oder zumindest einer anderen Versionsnummer probieren --- aber das ist nur mal so geraten

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »delix« (06.01.2010, 20:08)


3

07.01.2010, 13:50

Hallo!

Danke für den Tip delix!

Ich hab mal ein wenig rumexperimentiert mit den Java-Compilern auf meinem Rechner.

Wenn ich ecj runter mach und nur noch gcc-java und gcc43-java drauf ist, dann startet nach der Eingabe von configure und make ein Java-Compiler mit dem Befehl gcj. Daraufhin ist nichts mehr mit Speicherfehlern wie er noch bei ecj auftrat. Stattdessen hab ich jetzt folgendes (auszuweise nur die letzten Meldungen)

Zitat


/targets/classpath-0.98/lib/../vm/reference/sun/reflect/misc/ReflectUtil.java:90: warning: Class is a raw type. References to generic type Class<T> should be parameterized
Class declarer,
^^^^^

/targets/classpath-0.98/lib/../vm/reference/sun/reflect/misc/ReflectUtil.java:103: warning: Type safety: The methodisAssignableFrom(Class) belongs to the raw type Class. References to generic type Class<T> should be parameterized
&& declarer.isAssignableFrom(caller))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

11510 problems (7 errors, 11503 warnings)
make[1]: *** [compile-classes] Fehler 1
make[1]: Leaving directory `/targets/classpath-0.98/lib'
make: *** [all-recursive] Fehler 1


Leider kann ich hier nicht die ganzen Fehlermeldungen posten - nicht mal das Konsolenfenster zeigt mir noch alle an weil es viel zu viele sind! Jedoch sind die, die ich noch sehe in etwa so wie die gezeigten ("XXX is a raw type ...")!

Anderer Versuch: Pakete gcc-java, gcc43-java, java-1_6_0-openjdk und java-1_6_0-openjdk-devel sind drauf. configure ausgeführt und make läuft jetzt mit dem Kompiler javac durch, d.h. erst kommen Fehler von wegen "unchecked conversion", "unchecked cast", "unchecked ..." das geht so eine weile, dann beginnt er zu kompilieren bis alles hier fehlschlägt:

Zitat


/usr/local/LxNETES-3/arm-linux/bin/arm-linux-gcc -DHAVE_CONFIG_H -I. -I../../include -I../../include -I../../native/jni/classpath -I../../native/jni/native-lib -I/usr/local/LxNETES-3/arm-linux/include -MT jawt.lo -MD -MP -MF .deps/jawt.Tpo -c jawt.c -fPIC -DPIC -o .libs/jawt.o In file included from jawt.c:41:
../../include/jawt_md.h:44:22: X11/Xlib.h: No such file or directory In file included from jawt.c:41:
../../include/jawt_md.h:53: error: parse error before "Drawable"
../../include/jawt_md.h:53: warning: no semicolon at end of struct or union
../../include/jawt_md.h:54: warning: data definition has no type or storage class
../../include/jawt_md.h:55: error: parse error before "visualID"
../../include/jawt_md.h:55: warning: data definition has no type or storage class
../../include/jawt_md.h:56: error: parse error before "colormapID"
../../include/jawt_md.h:56: warning: data definition has no type or storage class
../../include/jawt_md.h:59: error: parse error before '}' token In file included from jawt.c:42:
../../native/jni/classpath/classpath_jawt.h:49:22: X11/Xlib.h: No such file or directory In file included from jawt.c:42:
../../native/jni/classpath/classpath_jawt.h:54: error: parse error before '*' token
../../native/jni/classpath/classpath_jawt.h:54: warning: data definition has no type or storage class
../../native/jni/classpath/classpath_jawt.h:55: error: parse error before classpath_jawt_get_drawable"
../../native/jni/classpath/classpath_jawt.h:55: warning: data definition has no type or storage class
../../native/jni/classpath/classpath_jawt.h:56: error: parse error before "classpath_jawt_get_visualID"
../../native/jni/classpath/classpath_jawt.h:56: warning: data definition has no type or storage class
jawt.c: In function `_Jv_GetDrawingSurfaceInfo':
jawt.c:106: error: invalid application of `sizeof' to an incomplete type
jawt.c:113: error: dereferencing pointer to incomplete type
jawt.c:115: error: dereferencing pointer to incomplete type
jawt.c:117: error: dereferencing pointer to incomplete type
jawt.c:119: error: dereferencing pointer to incomplete type
jawt.c: In function `_Jv_FreeDrawingSurfaceInfo':
jawt.c:138: error: dereferencing pointer to incomplete type
jawt.c:139: error: dereferencing pointer to incomplete type
jawt.c:140: error: dereferencing pointer to incomplete type
make[2]: *** [jawt.lo] Fehler 1
make[2]: Leaving directory `/targets/classpath-0.98/native/jawt'
make[1]: *** [all-recursive] Fehler 1
make[1]: Leaving directory `/targets/classpath-0.98/native'
make: *** [all-recursive] Fehler 1


Danach hab ich den ecj und ecj-bootstrap wieder hinzugefügt und nochmal configure und make gestartet. Jetzt ist das ganz und gar komisch!! Es wird der Kompiler ecj gestartet und vorher gabs hier ja nen Speicherfehler - jetzt aber nicht mehr! Stattdessen das hier:

Zitat


2995. WARNING in ../external/relaxngDatatype/org/relaxng/datatype/helpers/DatatypeLibraryLoader.java (at line 78)
private class ProviderEnumeration implements Enumeration {
^^^^^^^^^^^
Enumeration is a raw type. References to generic type Enumeration<E> should be parameterized
----------
2996. WARNING in ../external/relaxngDatatype/org/relaxng/datatype/helpers/DatatypeLibraryLoader.java (at line 95)
private static class Singleton implements Enumeration {
^^^^^^^^^^^
Enumeration is a raw type. References to generic type Enumeration<E> should be parameterized
----------
2996 problems (2 errors, 2994 warnings)make[1]: *** [compile-classes] Fehler 255
make[1]: Leaving directory `/targets/classpath-0.98/lib'
make: *** [all-recursive] Fehler 1


Sooo jetzt bin ich leider nicht wirklich weiter gekommen - nur die Art und Anzahl der Fehler hat sich verändert! :(
Da ich mich mit Java und den Fehlern überhaupt nicht auskenne und googeln bisher nix brauchbares gebracht hat bin ich ratlos!

:keineahnung: :keineahnung: :keineahnung:

4

07.01.2010, 17:14

das schaut doch schon mal ganz gut aus....
Mit Java kenn ich mich nicht aus und kann dir da deshalb nicht weiterhelfen.

Für mich sieht das ganze aber so aus, als ob da einige Bibliotheken und/oder Headerdateien bei deiner Installation fehlen. Ich würde mir gaaaaanz genau den Output des ./configure Befehls ansehen.

Generell gilt aus meiner Sicht :
zumindest für's erste alle "warnings" ignorieren und sich auf die tatsächlichen "Errors" konzentrieren.

Weiterhin viel Erfolg !

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »delix« (07.01.2010, 17:18)


5

11.01.2010, 14:08

Hmm,

also auf der GNU Classpath Website wird der gcj zum kompilieren empfohlen - also poste ich mal die Fehler die bei dessen Verwendung bei mir auftreten. Die anderen Kompiler lasse ich erstmal weg!
Falls jemand was mit den Meldungen anfangen kann (sind jetzt nur die Errors, ohne Warnings) wäre ich über einen Tip sehr dankbar! Andernfalls muss ich mal direkt in nem Java-Forum nachfragen!

Zitat


../javax/management/NotificationBroadcasterSupport.java:221: error: Type mismatch: cannot convert from Object to MBeanNotificationInfo[]
return info.clone();

../java/util/concurrent/CopyOnWriteArrayList.java:150: error: Type mismatch: cannot convert from Object to E[]
data = array.clone();

../java/util/concurrent/CopyOnWriteArrayList.java:367: error: Type mismatch: cannot convert from Object to E[]
E[] newData = data.clone();

../java/util/EnumMap.java:401: error: Type mismatch: cannot convert from Object to V[]
result.store = store.clone();

../gnu/java/lang/reflect/GenericSignatureParser.java:78: error: Type mismatch: cannot convert from Object to Type[]
return bounds.clone();

../gnu/java/lang/reflect/GenericSignatureParser.java:157: error: Type mismatch: cannot convert from Object to Type[]
return typeArgs.clone();

../external/jsr166/java/util/ArrayDeque.java:790: error: Type mismatch: cannot convert from Object to E[]
result.elements = elements.clone();



Am Ende erscheint diese Meldung hier:

Zitat


11510 problems (7 errors, 11503 warnings)
make[1]: *** [compile-classes] Fehler 1
make[1]: Leaving directory `/targets/classpath-0.98/lib'
make: *** [all-recursive] Fehler 1


Mfg The-Collar

Thema bewerten