 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Thomas Krimmer Guest
|
Posted: Fri May 04, 2007 5:02 pm Post subject: undefined reference |
|
|
Hey Leute,
ich hatte heute ein komisches Problem mit dem Linker. Ich habe in meinem
CPP-Projekt ua. eine Hilfsklasse (.h .cpp) die nur Funktionen zur
formatierten Ausgabe beinhaltet. Benutze sie NUR zum Debuggen - also
später raus. Leider konnte ich Sie heute nicht mehr mit meinem Makefile
benutzen - immer undefined reference. Komisch! Als ich diese beiden von
Hand (g++ -c blabla.h und blabla.cpp) kom. gings auf einmal? Wieso? Habe
keine Erklärung dafür. Hat die Reihenfolge im Makefile damit etwas zu
tun?? Oder die kom. Header Datei (.gch)?? Hat jemand so etwas schon mal
gehabt? Gruss Krimmie |
|
| Back to top |
|
 |
Markus Wichmann Guest
|
Posted: Sat May 05, 2007 1:23 am Post subject: Re: undefined reference |
|
|
Thomas Krimmer schrieb:
| Quote: | Hey Leute,
ich hatte heute ein komisches Problem mit dem Linker. Ich habe in meinem
CPP-Projekt ua. eine Hilfsklasse (.h .cpp) die nur Funktionen zur
formatierten Ausgabe beinhaltet. Benutze sie NUR zum Debuggen - also
später raus. Leider konnte ich Sie heute nicht mehr mit meinem Makefile
benutzen - immer undefined reference. Komisch! Als ich diese beiden von
Hand (g++ -c blabla.h und blabla.cpp) kom. gings auf einmal? Wieso? Habe
keine Erklärung dafür. Hat die Reihenfolge im Makefile damit etwas zu
tun?? Oder die kom. Header Datei (.gch)?? Hat jemand so etwas schon mal
gehabt? Gruss Krimmie
|
Was tut er da nur für Quark? Wieso kompiliert er eine Kopfsprung-Datei?
Sollte die nicht in blabla.cpp eingebunden werden? Also mit #include?
Nächster Punkt ist die Makefile: Ja, wat weis ich was da falsch ist,
wenn ich die Datei nicht kenne? Keines meiner Projekte ist zu groß, als
das man die nicht posten könnte (gekürzt). Letztlich läuft es in etwa
auf folgendes hinaus:
-------8<-----8<-----8<--------
default: all
SOURCES="und.cpp jetzt.cpp kommt.cpp eine.cpp lange.cpp Liste.cpp"
OBJECTS=$(SOURCES:.cpp=.o)
PROJNAME=prog
.PHONY: default all clean mrproper
%.o: %.cpp
g++ -c -o $@ $<
$(PROJNAME): $(OBJECTS)
g++ -o $@ $+
all: $(PROJNAME)
clean:
rm -rf $(OBJECTS) 2>&-
mrproper: clean
rm -f $(PROJNAME) 2>&-
----->8------->8-------->8------
So schwer also eigentlich nicht. Ich setze aber voraus, dass jede
Quelltextdatei einen Header hat. Und das der auch noch eingebunden ist
(ich habe noch nie davon gehört, ihn separat zu kompilieren). Also
bleibt folgendes für ein beispielhaftes "Hello, World!"
hw.h:
#ifndef HW_H__
# define HW_H__
#include <iostream>
int main(void);
#endif /* not HW_H__ */
hw.cpp:
#include "hw.h"
int main(void)
{
::std::cout << "Hello, World!" << ::std::endl;
return 0;
}
So, da gibts jetzt nix am Header rumzukompilieren. Das wird so kompiliert:
g++ -Wall -Wextra -ansi -pedantic -c -o hw.o hw.c
und so gelinkt:
g++ -o hw hw.o
Oder so:
ld -o hw hw.o -lstdc++
Allerdings kann Letzteres auch Chop Suey aus der Ausführbaren machen,
also sollte man lieber g++ nehmen.
HTH,
Markus
P.S.: Wenn der Header deines Debug-Modules noch irgendwo eingebunden
ist, sucht der Linker vergeblich nach den dort prototypisierten Funktionen.
P.P.S.: Nein, das da oben ist keine Vorschrift. Nur eine (wie ich finde)
gute Praxis. |
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Sat May 05, 2007 1:39 am Post subject: Re: undefined reference |
|
|
Thomas Krimmer <t.krimmer (AT) web (DOT) de> writes:
| Quote: | ich hatte heute ein komisches Problem mit dem Linker. Ich habe in
meinem CPP-Projekt ua. eine Hilfsklasse (.h .cpp) die nur Funktionen
zur formatierten Ausgabe beinhaltet. Benutze sie NUR zum Debuggen -
also später raus. Leider konnte ich Sie heute nicht mehr mit meinem
Makefile benutzen - immer undefined reference. Komisch! Als ich
diese beiden von Hand (g++ -c blabla.h und blabla.cpp) kom. gings
auf einmal? Wieso? Habe keine Erklärung dafür. Hat die Reihenfolge
im Makefile damit etwas zu tun?? Oder die kom. Header Datei (.gch)??
Hat jemand so etwas schon mal gehabt?
|
Wahrscheinlich schon; die meisten Sachen hat wohl schon vorher jemand
gehabt. Aber das ist aus Deiner Beschreibung schwer zu eruieren.
Poste bitte den minimalen Code, der das Problem hat, und die Befehl,
die Du verwendest, um es auszulösen. |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|