Linkerproblem ...



  • Tach

    Ich habe mir eine kleine Lib geschrieben welche ich nun mit einem Testprogramm auf Funktion überprüfen wollte. Das Testprojekt liegt im selben Verzeichnis, wie das Lib-Projekt ... wenn ich die Header -u. Source-Files der Lib dem Testprojekt hinzufüge, bekomm ich schon ne "undefined reference" Meldung ... genauso auch wenn ich die Lib zum Testprojekt linke. Ich hab kein Plan, woran das liegen könnte ... achja Compiler ist der mingw.

    Lässt sich so wahrscheinlich nich viel zu sagen, deshalb hab ich mal den entsprechenden Ordner zum Download.

    MfG && thx



  • kaptain karacho schrieb:

    Tach

    Ich habe mir eine kleine Lib geschrieben welche ich nun mit einem Testprogramm auf Funktion überprüfen wollte. Das Testprojekt liegt im selben Verzeichnis, wie das Lib-Projekt ... wenn ich die Header -u. Source-Files der Lib dem Testprojekt hinzufüge, bekomm ich schon ne "undefined reference" Meldung ... genauso auch wenn ich die Lib zum Testprojekt linke. Ich hab kein Plan, woran das liegen könnte ... achja Compiler ist der mingw.

    Lässt sich so wahrscheinlich nich viel zu sagen, deshalb hab ich mal den entsprechenden Ordner zum Download.

    Ich habe nicht den Hauch einer Ahnung, was ein 7z File ist und mein Computer auch nicht. Ich plane jetzt auch keine größere Google-Suche oder die Installation irgendwelcher Software deswegen.

    undefined reference heißt, dass er die Funktionen, die Du benutzt möchtest nicht in kompiliertem Zustand vorfindest. Entweder fehlen sie (Lib nicht eingebunden; deklarierte, aber undefinierte Funktionen).
    Das heißt, dass Du die Lib dem Linker (bzw. dem Compiler) nennen musst, damit er die Funktionen dort findet.

    Good Luck.

    Ansonsten wäre es schön, wenn Du Deine Fehler entsprechend so aufarbeiten und präsentieren würdest, dass ich das nicht mehr tun muss.



  • Tach ...

    7z ist die extension des 7Zip - Formats, dachte das hat sich mittlerweile schon stark verbreitet.

    Ansonsten ist mir schon klar, was "undefined reference" bedeutet, nur eben nicht, wie das hier passieren kann. Wie ich schon sagte, packe ich alle Dateien der Lib nochmal in mein Testprojekt, wird ja alles gemeinsam kompiliert und dann entsprechenden gelinkt. Trotzdem tritt der Fehler auf. Gleiches auch, wenn ich in meinem Testprojekt nur die paar Testfälle habe (ohne dass ich irgendwelche Dateien der Lib dem Projekt hinzufüge) und dann gegen eine fertig kompilierte Lib linke.

    Der Fehler ist immer der selbem, sobald ich eine Funktion / Methode der Lib aufrufe > undefined reference

    MfG



  • Nochwas ... die Installation von 7z lohnt sich schon ... man merkt einen deutlichen unterschied zu RAR und ZIP.



  • kaptain karacho schrieb:

    Nochwas ... die Installation von 7z lohnt sich schon ... man merkt einen deutlichen unterschied zu RAR und ZIP.

    ...es hilft einem aber keiner.



  • Tja sieht wohl so aus, als ob doch kein Mensch das Format nutz ...

    url=files.syn-com.de/lib.zip



  • kaptain karacho schrieb:

    Tja sieht wohl so aus, als ob doch kein Mensch das Format nutz ...

    url=files.syn-com.de/lib.zip

    Lass mich raten, gepackt wurde es mit diesem 7zip? Ich kann das Inhaltsverzeichnis sehen und danach streikt zip und sagt das File ist fehlerhaft.

    Aus dem Inhaltsverzeichnis vermute ich, dass es sich um ein Visual C++ File handeln soll?
    Ich habe kein VC hier, ich kann höchstens versuchen es unter GNU zu testen.



  • Ähmm ja ... hatte es mit versehentlich mit BZip2 Verfahren gepackt ... jetzt mit Deflate, d.h. hinter dem Link steckt jetzt ein für dich funktionierendes Archiv.
    Die Projektdateien stammen von Codeblocks ... Und wie oben schon geschrieben nutz ich auch den mingw, passt also.



  • Also nochmal zurück zum Anfang...

    kaptain karacho schrieb:

    Ich habe mir eine kleine Lib geschrieben welche ich nun mit einem Testprogramm auf Funktion überprüfen wollte. Das Testprojekt liegt im selben Verzeichnis, wie das Lib-Projekt ... wenn ich die Header -u. Source-Files der Lib dem Testprojekt hinzufüge, bekomm ich schon ne "undefined reference" Meldung ... genauso auch wenn ich die Lib zum Testprojekt linke. Ich hab kein Plan, woran das liegen könnte ... achja Compiler ist der mingw.

    Makefiles sind eine tolle Sache, sie verhindern, dass ich bei C++ immer gcc statt g++ schreibe und dann nicht weiß, warum nix geht... ;->

    Du hast zwei Fehler gemacht.

    1.) Du hast die Operatoren in Fraction zwar als friend Operatoren gekennzeichnet, wenn es sie denn gibt, aber Du hast nicht gesagt, dass es sie gibt ^^

    namespace estd {
    
      class fraction {
          friend fraction operator + (const fraction&, const fraction&);
    
          friend std::istream& operator >> (std::istream&, const fraction&);
      };
    
    fraction operator + (const fraction&, const fraction&);     // Hinzufügen
    std::ostream& operator << (std::ostream&, const fraction&); // Hinzufügen
    
    };
    

    2.) inline bedeutet, dass Code da eingefügt wird, wo er gebraucht wird. Also wird dafür keine Extra Funktion mehr angelegt. Du musst Funktionen im Header als inline Markieren und die Funktion dann verfügbar machen, also entgegen landläufiger Meinung die Implementation muss in einer Headerdatei stehen! Wer sie braucht, wird die Funktion sofort so wie sie ist in den Code einbauen. Steht inline Code in einer .cpp Datei wird er ignoriert, er wird an der Stelle ja grade nicht gebraucht => die Funktion, die Du in der Headerdatei beschrieben hast existiert nicht => Linkerfehler.

    fraction operator + (const fraction& a, const fraction& b) {    // kein inline!
    
        return fraction(a.m_num * b.m_denom + a.m_denom * b.m_num, a.m_denom * b.m_denom);
      }
    
      std::ostream& operator << (std::ostream& s, const fraction& f) {  // kein inline!
    
        return s << f.m_num << "/" << f.m_denom;
      }
    


  • Oh man ... ich nap, liegt ja eigentlich auf der Hand ...

    Danke, jetzt läufts!


Anmelden zum Antworten