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 versucht

    touch labor_utils.cc
    makeeinzel
    

    -Kein Fehler
    danach

    touch 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 ?


Anmelden zum Antworten