gcc findet funktionen ( manchmal ) nicht
-
Moin.
Ich habe zwei Quelltexte progA.cc und progB.cc. Beide nutzen functionen aus utils.c.
Die makefiles unterscheiden sich entsprechend nur durch das "A" resp "B". Klappt auch alles.
Nun habe ich den Funktionsumfang erweitert, und zwei Funktionen
- AlterInTagen, und
- GetNormalWert
in utils.cc und utils.hh aufgenommen, die ich aus beiden Programmen aufrufe.
Während progB sauber linkt, meldet der Linker bei progA, daß er die beiden Funktionen in utils.o nicht findet.
Und ich finde nicht, warum der gcc mault.Hat jemand eine Idee, warum ??
Hanns
-
hmm, zeig mal deine Makefile. Kann es sein, dass du vielleicht die dependencies falsch gesetzt hast und progA gegen eine alte Version von util.o linkst?
-
moin kingruedi
ich hab grad dies versuchttouch labor_utils.cc makeeinzel
-Kein Fehler
danachtouch labor_utils.cc makeanfrage
er gibt diese Meldung
g++ -c -Wall labor_utils.cc g++ laboranfrage.o dbase.o mystrings.o -olaboranfrage laboranfrage.o: In function `browseLabcodes(basic_string<char, string_char_traits<char>, __default_alloc_template<true, 0> >)': laboranfrage.o(.text+0x67de): undefined reference to `AlterInTagen (basic_string<char, string_char_traits<char>, __default_alloc_template<true, 0> >, basic_string<char , string_char_traits<char>, __default_alloc_template<true, 0> >)' laboranfrage.o(.text+0x6881): undefined reference to `getNormalWert(basic_string<char, string_char_traits<char>, __default_alloc_template<true, 0> >, basic_string<char, string_char_traits<char>, __default_alloc_template<true, 0> >, basic_string<char, string_char_traits<char>, __default_alloc_template<true, 0> >, int)' collect2: ld returned 1 exit status make: *** [laboranfrage] Error 1
in "make..." rufe ich über vi den "anfrage" resp "einzel" quelltext auf, danach das makefile ohne Fehler
linux1:/home/hannsw/labor_code # vi einzelbefund.mak einzelbefund: einzelbefund.o dbase.o mystrings.o labor_utils.o einzelbefund.mak g++ einzelbefund.o dbase.o mystrings.o labor_utils.o -oeinzelbefund mystrings.o: mystrings.cc mystrings.hh g++ -c -Wall mystrings.cc labor_utils.o: labor_utils.cc labor_utils.hh g++ -c -Wall labor_utils.cc dbase.o: dbase.cc dbase.hh g++ -c -Wall dbase.cc einzelbefund.o: dbase.hh einzelbefund.cc g++ -c -Wall einzelbefund.cc
und hier das mit Fehlermeldung
linux1:/home/hannsw/labor_code # vi laboranfrage.mak laboranfrage: laboranfrage.o dbase.o mystrings.o laboranfrage.mak dbase.hh g++ laboranfrage.o dbase.o mystrings.o -olaboranfrage mystrings.o: mystrings.cc mystrings.hh g++ -c -Wall mystrings.cc dbase.o: dbase.cc dbase.hh g++ -c -Wall dbase.cc laboranfrage.o: dbase.hh laboranfrage.cc g++ -c -Wall laboranfrage.cc
Ich hatte auch schon an zu großen Quelltext geadcht, aber einzelbefund ist größer als Laboranfrage.
Was ich noch nicht gemacht habe, aus den .o eine lib zu machen ???
An den makefiles dürfte es doch eigentlich nicht liegen. Man sollte halt wissen, wie der Linker vorgeht.
Könnte es sein, daß die LinkerTabelle irgendwie überläuft ?