C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

undefined reference

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Thomas Krimmer
Guest





PostPosted: Fri May 04, 2007 5:02 pm    Post subject: undefined reference Reply with 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
Back to top
Markus Wichmann
Guest





PostPosted: Sat May 05, 2007 1:23 am    Post subject: Re: undefined reference Reply with quote



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





PostPosted: Sat May 05, 2007 1:39 am    Post subject: Re: undefined reference Reply with quote



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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.