Verständnisprobleme bei "undefined reference to"-Fehler



  • Hallo!

    Ich habe eine Bibliothek kompiliert (musicbrainz), installiert und über den Creator ins Projekt eingebunden.
    Versuche ich die Bibliotheken zu verwenden, bekomme ich "undefined reference to"-Fehler. Soweit ich gelesen habe, ist das ein Linking-Problem, aber alle Lösung die ich gefunden habe, schlagen vor die Bibliothek einzubinden, was ich aber schon gemacht habe.

    Anscheinend habe ich ein größeres Problem beim funktionalem Verständnis was da so vor sich geht und das ist der Grund warum ich hier schreibe, ich brauche Hilfe, weil ich kein Stück mehr weiterkomme.

    Falls irgendwelche Infos fehlen, bitte kurz Bescheid sagen und vielen Dank für die Hilfe im Voraus!

    Schönen Gruß
    Proton



  • dann zeig doch mal deine qmake file her. Was ist das für eine Bibliothek? statisch oder dynamisch?



  • Also ich habe gerade erst mit Qt angefangen und verwende den Qt-Creator und da habe ich kein qmake-File gefunden sondern nur die .pro und die sieht wie folgt aus: http://pastebin.com/3EH16jrw

    Die Bibliothek von Musicbrainz möchte ich gerne verwenden um die Fingerprints von Liedern und darüber die Tags zu bestimmen.

    Vielen Dank schon mal.

    SG
    Proton



  • Deine .pro File sieht etwas komisch aus. Hast du das selber so eingefügt? Was zB hinter win32:Config steht kann auf jedenfall nicht richtig sein. Weil es diesen Pfad unter Windows nicht gibt. Benutzt du eine .dll Datei oder ist das eine .a oder .lib?



  • Nein, dass habe ich über den qt-creator eingefügt.

    Dass es den Pfad unter Windows nicht gibt, kann durchaus korrekt sein,
    weil ich Linux verwende und eine shared-Library (.so). 🙂

    Für Windows möchte ich das auch irgendwann mal kompilieren, aber da Linux mein primäres System ist, liegt da auch der Fokus.

    Hier mal die Ausgabe beim Versuch zu kompilieren:
    http://pastebin.com/uV547kxq



  • blöde frage. Hast du nach dem hinzufügen qmake ausgeführt? Wenn du auf dein Projekt einen rechtsklick machst und auf "qmake ausführen" klickst. Normal muss das gemacht werden, wenn du neue Bibliotheken einfügst. Kann auch sein, dass du da schon einen Error bekommst.



  • Bei qmake tritt kein Fehler auf.

    12:26:53: Führe Schritte für Projekt Worker4Music aus...
    12:26:53: Starte "/usr/lib/x86_64-linux-gnu/qt5/bin/qmake" /home/proton/Dev/Worker4Music/Worker4Music.pro -r -spec linux-g++-64 CONFIG+=debug
    12:26:53: Der Prozess "/usr/lib/x86_64-linux-gnu/qt5/bin/qmake" wurde normal beendet.
    12:26:53: Verstrichene Zeit: 00:00.
    


  • dann schau dir das doch mal genauer an.

    /home/proton/Dev/build-Worker4Music-Desktop-Debug/../Worker4Music/musicbrain.cpp:28: undefined reference to `MusicBrainz5::CQuery::~CQuery()'
    

    Was steht denn dort in der musicbrain?



  • Der Quelltext sieht wie folgt aus:
    http://pastebin.com/C3q3SsU0

    Den habe ich aber nur hier https://github.com/metabrainz/libmusicbrainz/blob/master/examples/cdlookup.cc
    rauskopiert. Alles was danach kommt ist auskommentiert.
    Ich habe es mit einem anderen Konstruktor versucht
    (Musicbrain-API), aber ohne Erfolg.



  • Also wenn du das hier angibst

    using namespace MusicBrainz5;
    

    dann brauchst du kein MusicBrainz5:: vor

    MusicBrainz5::CQuery Query("cdlookupexample-1.0", "musicbrainz.org", 80);
    

    schreiben.

    normal würde ein

    CQuery Query("cdlookupexample-1.0");
    

    reichen.



  • Das weiß ich, ich habe es nur mal zur Sicherheit reingesetzt, weil es eigentlich keinen negativen Auswirkungen haben dürfte, wenn es trotzdem dabei steht.

    Wie gesagt, ich habe das Beispiel kopiert und ausprobiert und da stand der Namespace natürlich nicht dabei.



  • Dann weiß ich leider auch nicht. Kann dir nur raten nochmal deine .pro Datei aufzuräumen. Auch wenn die Einträge automatisch eingefügt wurden finde ich sie dennoch sehr unschön. Informiere dich mal wie man eine Bibliothek sauber in einer .pro Datei hinzufügt und mach das mal.



  • Ist denn die libmusucbrainz5.so noch in Ordnung?
    Was sagt ein

    readelf -Ws /usr/lib64/libmusicbrainz5.so | grep CQuery
    

    (Pfad zur libmuscbrainz5.so bitte anpassen falls die lib nicht in /usr/lib64 liegt)
    Wie hast du musicbrainz installiert?



  • Das Problem saß mal wieder 80cm vorm Bildschirm. 🙄
    Ich wollte gestern Abend mal ausprobieren die Bibliothek in ein Verzeichnis
    innerhalb des Projekts zu kopieren, dabei ist mir aufgefallen,
    dass beim kompilieren auch noch eine andere Bibliothek erstellt wurde,
    nämlich eine libmusicbrainz5cc.so.
    Dann habe ich diese eingebunden und siehe da, das Projekt kompiliert.

    Ich muss dazu sagen, dass ich bisher davon ausgegangen bin, dass man ohne Problem
    auch C-Bibliotheken einbinde könnte, aber da wurde ich jetzt eines besseren belehrt.

    Nichtsdestotrotz, vielen Dank für die Hilfe! 👍

    Schönen Gruß
    Proton



  • Proton23 schrieb:

    Ich muss dazu sagen, dass ich bisher davon ausgegangen bin, dass man ohne Problem
    auch C-Bibliotheken einbinde könnte, aber da wurde ich jetzt eines besseren belehrt.

    Was hat ein Schreibfehler damit zu tun wie Problemlos man eine C-Bibliothek einbinden kann?



  • Das war kein Schreibfehler (es gibt sowohl die Datei libmusicbrainz5.so als auch
    die Datei libmusicbrainz5cc.so) sondern die Bibliothek wurde, nach meinem Verständnis,
    einmal mit C-Einstellungen und C-Compiler erstellt und das gleiche einmal für C++.
    Sollte ich da falsch liegen lasse ich mich gerne belehren, weil ich dann keinen Schimmer
    habe warum es mit der libmusicbrainz5cc.so funktioniert und mit der libmusicbrainz5.so nicht.

    SG
    Proton


Anmelden zum Antworten