Linker meckert über nicht definierte Funktion

B

_Bongo

Grünschnabel
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
 
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'.
 
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
 
Ist der Pfad, in dem sich die .so-Datei befindet in deiner ld.so.conf inkludiert oder in deinem LD_LIBRARY_PATH enthalten?
 
Die Umgebungsvariable LD_LIBRARY_PATH ist auf meinem System garnicht definiert. Definiere ich sie mit dem Pfad zur Bibliothek, ändert sich aber auch nix.
 
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.
 
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.
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.
 
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
 
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.
 

Ähnliche Themen

'libraryname': undefined reference to 'functionname'

Server-Monitoring mit RRDTool

Zurück
Oben