Linker meckert über nicht definierte Funktion

Dieses Thema im Forum "C/C++" wurde erstellt von _Bongo, 24.08.2013.

  1. _Bongo

    _Bongo Grünschnabel

    Dabei seit:
    24.08.2013
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo zusammen.

    Ich habe mir bei mysql den Connector und Beispielcode für den Zugriff auf eine mysql-Datenbank runtergeladen und habe damit, scheinbar, nur ein einziges Problem. Der Code ist soweit ok. Der Linker bricht seinen Dienst aber mit folgender Meldung ab:

    Code:
    /tmp/ccQbGe1e.o: In function `main':
    sqlConnectionSample.cpp:(.text+0x4c): undefined reference to `get_driver_instance'
    collect2: ld gab 1 als Ende-Status zurück
    
    Demnach gehe ich davon aus, dass die Funktionsdefinition fehlt. Ich kann mir nur vorstellen, dass der Code der Funktion in der Bibliothek (libmysqlcppconn.so) steht. Den Pfad, in dem diese Bibliothek gespeichert ist, habe ich, so glaube ich zumindest, richtig an ldconfig übergeben:

    Habe die Datei /etc/ld.so.conf.d/mysql.conf mit folgendem Inhalt erstellt: /usr/local/lib/sqlconn.
    Unter /etc/ld.so.conf steht: /etc/ld.so.conf.d/*.
    Anschließend habe ich ldconfig manuell ausgeführt - verlief ohne Fehler.

    Irgendwas habe ich jedoch falsch gemacht oder übersehen. Da ich vom Einbinden zusätzlicher Bibliotheken und der damit erforderlichen Linker-Konfig noch nicht allzu viel verstehe, hoffe ich, dass mich jemand auf den rechten Pfad lenken kann.


    Danke für's Durchlesen.

    Gruß
    Kai
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 tgruene, 25.08.2013
    tgruene

    tgruene Routinier

    Dabei seit:
    02.02.2012
    Beiträge:
    418
    Zustimmungen:
    0
    Die Fehlermeldung, die Du angibst, wird vom linker ausgegeben, wie Du ja selber sagt. Die ldconfig bezieht sich auf Programme, die bereits kompiliert sind. Du musst dem Linker (bzw. gcc) die Bibliothek (libmysqlcppconn.so) angeben '-lmysqlcppconn'.
     
  4. _Bongo

    _Bongo Grünschnabel

    Dabei seit:
    24.08.2013
    Beiträge:
    4
    Zustimmungen:
    0
    Ich habe das jetzt wie folgt an g++ respektive gcc übergeben:

    Code:
    g++ -o test -lmysqlcppconn sqlconnectionsample.cpp
    Erhalte aber wieder dieselbe Fehlermeldung.

    Aber mal kurz was anderes:
    Durch die Eintragung der Bibliotheksdatei in der ldconfig-Konfiguration, sollte er doch diese Bibliothek automatisch berücksichtigen, oder nicht? Außerdem heißt die Bibliothek libmysqlcppconn.so (ist ein Link auf die eigentliche Bibliothek). Warum bekomme ich vom Linker gesagt, dass er diese Datei nicht findet, wenn ich:

    Code:
    g++ -o test -llibmysqlcppconn sqlconnectionsample.cpp
    schreibe?

    Gruß

    Kai
     
  5. #4 bitmuncher, 25.08.2013
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Ist der Pfad, in dem sich die .so-Datei befindet in deiner ld.so.conf inkludiert oder in deinem LD_LIBRARY_PATH enthalten?
     
  6. _Bongo

    _Bongo Grünschnabel

    Dabei seit:
    24.08.2013
    Beiträge:
    4
    Zustimmungen:
    0
    Die Umgebungsvariable LD_LIBRARY_PATH ist auf meinem System garnicht definiert. Definiere ich sie mit dem Pfad zur Bibliothek, ändert sich aber auch nix.
     
  7. #6 tgruene, 27.08.2013
    tgruene

    tgruene Routinier

    Dabei seit:
    02.02.2012
    Beiträge:
    418
    Zustimmungen:
    0
    ld.so.conf und LD_LIBRARY_PATH haben nichts mit dem Linken zu tun, das nach dem Kompilieren mit g++ geschicht, also nichts damit, wodurch Dein Fehler erzeugt wird.
    Zum Fehler: Gib mal zusaetzlich zu -lmysqlcppconn mittels -L/pfad/zur/bibliothek den Pfad an, in dem mysqlcppconn.so liegt.
     
  8. #7 bitmuncher, 27.08.2013
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Stimmt, du hast Recht. Es muss natürlich der LIBRARY_PATH sein. Der wird vom GCC genutzt, während LD_LIBRARY_PATH vom fertig kompilierten Programm genutzt wird.
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. _Bongo

    _Bongo Grünschnabel

    Dabei seit:
    24.08.2013
    Beiträge:
    4
    Zustimmungen:
    0
    Habe es jetzt mit dem Aufruf

    Code:
    g++ -o test -lmysqlcppconn -L/usr/local/lib/sqlconn sqlConnectionSample.cpp
    versucht.

    Außerdem habe ich es mit der Umgebungsvariablen LIBRARY_PATH probiert. Der Fehler ist immer derselbe. Vielleicht mache ich ja einen grundlegenden Fehler. Ich lud die Bibliothek und alle Headerdateien so runter, wie ich sie anschließend in die Verzeichnisse kopiert habe. Header sind ja ohnehin nur Textdateien, die bei Bedarf lediglich eingebunden und dann erst übersetzt werden. Damit habe ich also nix weiter angestellt, außer sie in das eingestellte Verzeichnis zu kopieren. Die Bibliothek endete schon auf .so, weswegen ich wohl davon ausgehen konnte, dass es sich um eine bereits übersetzte Bibliothek handelt.
    Muss man denn, wenn man eine fertig kompilierte Bibliothek runterlädt, noch was anderes machen, außer sie in ein gültiges Verzeichnis zu kopieren?

    Gruß
    Kai
     
  11. #9 bitmuncher, 29.08.2013
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Wichtig ist vor allem, dass die Library für dein System oder ein kompatibles System kompiliert wurde und dass alle Abhängigkeiten erfüllt sind.
     
Thema: Linker meckert über nicht definierte Funktion
Besucher kamen mit folgenden Suchen
  1. c nicht definierter verweis auf

    ,
  2. Nicht definierter Verweis auf `dlopen

    ,
  3. nicht definierter verweis auf `std::cout

Die Seite wird geladen...

Linker meckert über nicht definierte Funktion - Ähnliche Themen

  1. Linkerproblem mit MXE

    Linkerproblem mit MXE: Hallo Leute :winke:, ich war echt lange nicht mehr hier... Wie auch immer, ich schreibe gerade ein Programm, das sowohl Qt5, als auch OpenMP...
  2. LLVM entwickelt eigenen ELF-Linker

    LLVM entwickelt eigenen ELF-Linker: Wie das LLVM-Projekt bekannt gab, steht mit »lld« ein alternativer Linker bereit, der sich vor allem durch seine gesteigerte Geschwindigkeit...
  3. Über Linker Skript externe Variablen übergeben

    Über Linker Skript externe Variablen übergeben: Hi, ich habe mich im Rahmen einer Projektarbeit an der Uni mit der "Linker Command Language" beschäftigt und mit dem Umgang des LD's. Als...
  4. DRINGEND Linker Frage!

    DRINGEND Linker Frage!: Hi, muss dringend ein Projekt komplieren, jedoch muss eigene Librarys nutzem, die ich in der Makefile für LD_FLAGS eintrage. Nun habe ich auch...
  5. Linker Problem

    Linker Problem: Ich verwende Gentoo 2006.1 AMD64. Ich möchte den GCC u.a. mit den folgenden Optionen ansteuern: -lrt -lm. Nur erscheint dann die...