[gelöst] Problem mit dem Linker
Verfasst: 11. August 2005 14:27
Hallo,
ich habe ein QT-Projekt gestartet, das mittlerweile ziemlich umfangreich (also für meine Verhältnisse) geworden ist, und ich habe eigentlich erst angefangen.
Ich habe mich anhand dieses Projektes in die C++ Programmierung und in QT eingearbeitet (oder sollte ich besser sagen an der Oberfläche gekratzt), vielleicht ein bißchen viel auf einmal, und da sind eben ein paar
Wissenslücken vorhanden, wie in nun folgender Situation:
Bisher habe ich alle meine Sourcen (x.cpp) in main.cpp includiert.
Wenn man mich jetzt fragt weshalb, dann kann ich nur sagen, daß es ein Weg war der bisher funktioniert hat, ich habe ihn eingeschlagen und nicht weiter darüber nachgedacht. Aber er hat den Nachteil, daß nur ein einziges Objektfile (neben den moc_xx.o-Files) erzeugt wird, was bedeutet, daß egal wo ich etwas ändere,es muß immer alles neu compiliert werden, was mittlerweile unangenehm lange dauert.
Ich arbeite unter SuSE Linux 9.0 mit QT 3.2
Ich habe also versucht, das Projekt so zu "entflechten" (sorry für den Ausdruck), daß ich die #include "xx.cpp" aus main.cpp herausgenommen
und das Projektfile xy.pro bei SOURCES += xx.cpp eingetragen habe.
Bisher stand da bei SOURCES += main.cpp, jetzt alle xx.cpp.
Ich erzeuge mit qmake xy.pro -o Makefile das Makefile und compiliere mit make. Die Objektdateien werden alle angelegt, nach meinem dafürhalten
ohne Fehler, auch das moc_xx.o-file ist da.
Allerdings beim linken bekomme ich ca. 5 Bildschirmseiten Fehlermeldungen, alle derselben couleur, hier ein Auszug:
g++ -o cad_parser cad_parser_main.o cad_parser_hauptfenster.o hauptfenster_slot_sprachauswahl.o hauptfenster_slots_menue_datei.o hauptfenster_slots_bestueckliste.o cad_parser_gehaeuseform.o cad_parser_gf_erzeugen.o cad_parser_gf_liste.o cad_parser_bauelement.o cad_parser_be_liste.o cad_parser_bestueckposition.o cad_parser_bestueckposition_beinchen_liste.o cad_parser_bestueckposition_ball_liste.o cad_parser_dialog_bitmap_bearbeiten.o cad_parser_grafik_funktionen.o cad_parser_datei_dialog.o cad_parser_hauptfenster_mouse_event.o moc_cad_parser_hauptfenster.o -L/usr/lib/ -L/usr/lib/qt3/lib/ -L/usr/X11R6/lib/ -lqt -lXext -lX11 -lm
cad_parser_hauptfenster.o(.text+0xe80): In function `hauptfenster::hauptfenster[not-in-charge](QWidget*, char const*, unsigned, int)':
/usr/lib/qt3/include/qstring.h:1049: undefined reference to `gehaeuseform::getGf_name()'
cad_parser_hauptfenster.o(.text+0x11d8):/usr/lib/qt3/include/qstring.h:1049: undefined reference to `bauelement::getBe_name()'
cad_parser_hauptfenster.o(.text+0x6140): In function `hauptfenster::hauptfenster[in-charge](QWidget*, char const*, unsigned, int)':
/usr/lib/qt3/include/qstring.h:1049: undefined reference to `gehaeuseform::getGf_name()'
cad_parser_hauptfenster.o(.text+0x6498):/usr/lib/qt3/include/qstring.h:1049: undefined reference to `bauelement::getBe_name()'
hauptfenster_slots_bestueckliste.o(.text+0x21c): In function `hauptfenster::bestueckliste_slot_zeile_einfuegen()':
/home/christoph/C++qt/CAD-Parser/hauptfenster_slots_bestueckliste.cpp:120: undefined reference to `bestueckposition::getStatus()'
hauptfenster_slots_bestueckliste.o(.text+0x71a):/home/christoph/C++qt/CAD-Parser/hauptfenster_slots_bestueckliste.cpp:183: undefined reference to `bestueckposition::setKoordinate_x(double)'
hauptfenster_slots_bestueckliste.o(.text+0x736):/home/christoph/C++qt/CAD-Parser/hauptfenster_slots_bestueckliste.cpp:184: undefined reference to `bestueckposition::setKoordinate_y(double)'
hauptfenster_slots_bestueckliste.o(.text+0x8c4): In function `hauptfenster::bestueckliste_zeile_einfuegen(int, int)':
/home/christoph/C++qt/CAD-Parser/hauptfenster_slots_bestueckliste.cpp:222: undefined reference to `bestueckposition::getEinbauplatz()'
hauptfenster_slots_bestueckliste.o(.text+0x935):/home/christoph/C++qt/CAD-Parser/hauptfenster_slots_bestueckliste.cpp:225: undefined reference to `bestueckposition::getBauelement_name()'
und so weiter und so weiter.
Ich habe die betreffende Projekt-Datei angehängt, vielleicht ist der Fehler
ja dort zu suchen.
Ich denke es kann nur eine Kleinigkeit sein, der Ochse vor dem Berg sozusagen.
Vielen Dank für jede Hilfe
Grüße
Christoph
ich habe ein QT-Projekt gestartet, das mittlerweile ziemlich umfangreich (also für meine Verhältnisse) geworden ist, und ich habe eigentlich erst angefangen.
Ich habe mich anhand dieses Projektes in die C++ Programmierung und in QT eingearbeitet (oder sollte ich besser sagen an der Oberfläche gekratzt), vielleicht ein bißchen viel auf einmal, und da sind eben ein paar
Wissenslücken vorhanden, wie in nun folgender Situation:
Bisher habe ich alle meine Sourcen (x.cpp) in main.cpp includiert.
Wenn man mich jetzt fragt weshalb, dann kann ich nur sagen, daß es ein Weg war der bisher funktioniert hat, ich habe ihn eingeschlagen und nicht weiter darüber nachgedacht. Aber er hat den Nachteil, daß nur ein einziges Objektfile (neben den moc_xx.o-Files) erzeugt wird, was bedeutet, daß egal wo ich etwas ändere,es muß immer alles neu compiliert werden, was mittlerweile unangenehm lange dauert.
Ich arbeite unter SuSE Linux 9.0 mit QT 3.2
Ich habe also versucht, das Projekt so zu "entflechten" (sorry für den Ausdruck), daß ich die #include "xx.cpp" aus main.cpp herausgenommen
und das Projektfile xy.pro bei SOURCES += xx.cpp eingetragen habe.
Bisher stand da bei SOURCES += main.cpp, jetzt alle xx.cpp.
Ich erzeuge mit qmake xy.pro -o Makefile das Makefile und compiliere mit make. Die Objektdateien werden alle angelegt, nach meinem dafürhalten
ohne Fehler, auch das moc_xx.o-file ist da.
Allerdings beim linken bekomme ich ca. 5 Bildschirmseiten Fehlermeldungen, alle derselben couleur, hier ein Auszug:
g++ -o cad_parser cad_parser_main.o cad_parser_hauptfenster.o hauptfenster_slot_sprachauswahl.o hauptfenster_slots_menue_datei.o hauptfenster_slots_bestueckliste.o cad_parser_gehaeuseform.o cad_parser_gf_erzeugen.o cad_parser_gf_liste.o cad_parser_bauelement.o cad_parser_be_liste.o cad_parser_bestueckposition.o cad_parser_bestueckposition_beinchen_liste.o cad_parser_bestueckposition_ball_liste.o cad_parser_dialog_bitmap_bearbeiten.o cad_parser_grafik_funktionen.o cad_parser_datei_dialog.o cad_parser_hauptfenster_mouse_event.o moc_cad_parser_hauptfenster.o -L/usr/lib/ -L/usr/lib/qt3/lib/ -L/usr/X11R6/lib/ -lqt -lXext -lX11 -lm
cad_parser_hauptfenster.o(.text+0xe80): In function `hauptfenster::hauptfenster[not-in-charge](QWidget*, char const*, unsigned, int)':
/usr/lib/qt3/include/qstring.h:1049: undefined reference to `gehaeuseform::getGf_name()'
cad_parser_hauptfenster.o(.text+0x11d8):/usr/lib/qt3/include/qstring.h:1049: undefined reference to `bauelement::getBe_name()'
cad_parser_hauptfenster.o(.text+0x6140): In function `hauptfenster::hauptfenster[in-charge](QWidget*, char const*, unsigned, int)':
/usr/lib/qt3/include/qstring.h:1049: undefined reference to `gehaeuseform::getGf_name()'
cad_parser_hauptfenster.o(.text+0x6498):/usr/lib/qt3/include/qstring.h:1049: undefined reference to `bauelement::getBe_name()'
hauptfenster_slots_bestueckliste.o(.text+0x21c): In function `hauptfenster::bestueckliste_slot_zeile_einfuegen()':
/home/christoph/C++qt/CAD-Parser/hauptfenster_slots_bestueckliste.cpp:120: undefined reference to `bestueckposition::getStatus()'
hauptfenster_slots_bestueckliste.o(.text+0x71a):/home/christoph/C++qt/CAD-Parser/hauptfenster_slots_bestueckliste.cpp:183: undefined reference to `bestueckposition::setKoordinate_x(double)'
hauptfenster_slots_bestueckliste.o(.text+0x736):/home/christoph/C++qt/CAD-Parser/hauptfenster_slots_bestueckliste.cpp:184: undefined reference to `bestueckposition::setKoordinate_y(double)'
hauptfenster_slots_bestueckliste.o(.text+0x8c4): In function `hauptfenster::bestueckliste_zeile_einfuegen(int, int)':
/home/christoph/C++qt/CAD-Parser/hauptfenster_slots_bestueckliste.cpp:222: undefined reference to `bestueckposition::getEinbauplatz()'
hauptfenster_slots_bestueckliste.o(.text+0x935):/home/christoph/C++qt/CAD-Parser/hauptfenster_slots_bestueckliste.cpp:225: undefined reference to `bestueckposition::getBauelement_name()'
und so weiter und so weiter.
Ich habe die betreffende Projekt-Datei angehängt, vielleicht ist der Fehler
ja dort zu suchen.
Ich denke es kann nur eine Kleinigkeit sein, der Ochse vor dem Berg sozusagen.
Vielen Dank für jede Hilfe
Grüße
Christoph