gcj: "undefined reference to ..." (libgcj inst., m

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
thomas2496
Beiträge: 20
Registriert: 01.05.2004 12:16:56

gcj: "undefined reference to ..." (libgcj inst., main spez!)

Beitrag von thomas2496 » 19.04.2005 18:00:26

Hallo.

Ich habe ein Problem zu dem man mir wahrscheinlich gerne meine Sachen um die Ohren hauen würde.

Ich möchte ein Java-Scource kompuilieren welches ein Paket von mir benutzt. Aber gcj beschwert sich über

Code: Alles auswählen

thomas@devel:~/myfiles/developing/java$ gcj --main=test_irc test_irc.java
test_irc.java:2: Warnung: source file for class `portyqui.Irc.IrcEvents' is newer than its matching class file.  Source file `./portyqui/Irc/IrcEvents.java' used instead
test_irc.java: In class `test_irc':
test_irc.java: In method `test_irc.main(java.lang.String[])':
test_irc.java:13: Warnung: source file for class `MyIrcEvents' is newer than its matching class file.  Source file `./MyIrcEvents.java' used instead
/tmp/ccwYxQfN.o(.text+0x5c): In function `test_irc::main(JArray<java::lang::String*>*)':
: undefined reference to `MyIrcEvents::class$'
/tmp/ccwYxQfN.o(.text+0x6b): In function `test_irc::main(JArray<java::lang::String*>*)':
: undefined reference to `MyIrcEvents::MyIrcEvents[in-charge]()'
/tmp/ccwYxQfN.o(.text+0x7f): In function `test_irc::main(JArray<java::lang::String*>*)':
: undefined reference to `portyqui::Irc::IrcConnection::class$'
/tmp/ccwYxQfN.o(.text+0x95): In function `test_irc::main(JArray<java::lang::String*>*)':
: undefined reference to `portyqui::Irc::IrcConnection::IrcConnection[in-charge](portyqui::Irc::IrcEvents*)'
collect2: ld returned 1 exit status
Nun. Ich habe in Internet gesucht und gereizt wirkende Anworten gefunden.
Hier die Zusammenfassung:

- die passende libgcj ist installiert
- main= ist spezifiziert worden
- der CLASSPATH wurde von mir angegeben. Und zwar auf X verschiedene Arten:
# ../portyqui/Irc/IrcEvents.class;../portyqui/Irc/IrcConnection.class ...
# ../portyqui/Irc/
... und ich habe ihn direkt gcj übergeben

Zu allem Überfluss funktionierte das Kompilieren noch bevor ich ein paar Änderungen gemacht habe ("_" aus Klassennamen entfernt, Fehlerbehandlungen eingefügt.).
Ich kann nicht wiederlegen dass ich irgendwas kaputt gemacht habe... aber bei den kleinen Klassen kann man da nicht viel falsch machen.

Hier ist nun noch der Kopf der Dateien des Paketes:

Code: Alles auswählen

package portyqui.Irc;
...
Im Verzeichnis portyqui/Irc/ . Die Kompilation findet vom Paket-Root aus statt.


Ich bin mir sicher das ich was falsch mache, nur was würde ich gerne wissen.

Grüße,
Thomas.

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 20.04.2005 19:11:38

Das was eigentlich normalerweise in den Classpath muss is t der Ordner wo das Package anfängt. Also am besten am beispiel:

../portyqui/Irc/IrcConnection.class mit package portyqui.Irc;
dort muss
.. in den Classpath den Rest klappert java dann auf der Suche nach portyqui.Irc selber ab.

Aber ich denke am besten machst du absolute Pfadangaben (Auch wenn es vermutlich nicht daran liegt...)

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

thomas2496
Beiträge: 20
Registriert: 01.05.2004 12:16:56

Beitrag von thomas2496 » 20.04.2005 19:46:12

Hallo peschmae und danke das Du dich dem Leidigen Thema widmest ^^.
peschmae hat geschrieben:Das was eigentlich normalerweise in den Classpath muss is t der Ordner wo das Package anfängt. Also am besten am beispiel:

../portyqui/Irc/IrcConnection.class mit package portyqui.Irc;
dort muss
.. in den Classpath den Rest klappert java dann auf der Suche nach portyqui.Irc selber ab.
Ich dachte auch das es ein Verziechnis und kein Datei-Pfad sein muss (wäre ja sinnlos 12 volle Pfade anzugeben). Ich hab in der bash-history nachgeschaut und gesehen das ich auch das ausprobiert habe - ebend nochmal. Es bringt nix.

Unter Windows (98 ) kann ich mit dem Sun-Kompiler auch nix Anfangen: Kein Speicherplatz mehr im Umgebungsvariablen-Bereich. Zumal ich keine Lust auf Windows hab!

Falls die paar (das Projekt ist gerade am Beginn) Zeilen Code interessieren, muss ich sie jemandem Mailen - Webspache hab ich nicht zur Verfügung.


Danke.

Grüße, Thomas.

thomas2496
Beiträge: 20
Registriert: 01.05.2004 12:16:56

Beitrag von thomas2496 » 23.04.2005 17:46:52

Hallo.

Ich habe das ganze mit ner jüngeren Version von gcj unter Woody (v 3.0.4) kompiliert und das ganze ist gleich.

Wenn ich die finalisierte MyIrcEvents.java (ein Teil von test_irc.java) kompiliere meckert er schon wegen der abstrakten Klasse IrcEvents. Ich dachte erst das es daran lag das ich einen leeren Kontruktor hatte - dann machte ich ihn raus und dann kam dennoch dies:

Code: Alles auswählen

thomas@alpha:~/java$ gcj MyIrcEvents.java
MyIrcEvents.java:2: warning: Source file for class `portyqui.Irc' is newer than its matching class file. Source file used instead
/usr/lib/gcc-lib/i386-linux/3.0.4/../../../crt1.o: In function `_start':
/usr/lib/gcc-lib/i386-linux/3.0.4/../../../crt1.o(.text+0x18): undefined reference to `main'
/tmp/ccSDdQx3.o: In function `MyIrcEvents::MyIrcEvents[in-charge]()':
/home/thomas/java/MyIrcEvents.java(.text+0xd): undefined reference to `portyqui::Irc::IrcEvents::IrcEvents[in-charge]()'
/tmp/ccSDdQx3.o: In function `_GLOBAL__I__ZN11MyIrcEventsC1Ev':
/home/thomas/java/MyIrcEvents.java(.data+0x74): undefined reference to `portyqui::Irc::IrcEvents::class$'
collect2: ld returned 1 exit status
Er scheint in der abstrakten Klasse IrcEvents ein Problem mit dem Konstuktor zu haben. Aber wieso? Was bedeutet das "in-charge"?

Grüße,
Thomas.

Antworten