Wenn Sie ein Anwendungsprogramm so verlinken, dass es die
MySQL-Clientbibliothek benutzt, werden für Symbole, die mit
mysql_
anfangen, undefined
reference
-Fehler gemeldet werden:
/tmp/ccFKsdPa.o: In function `main': /tmp/ccFKsdPa.o(.text+0xb): undefined reference to `mysql_init' /tmp/ccFKsdPa.o(.text+0x31): undefined reference to `mysql_real_connect' /tmp/ccFKsdPa.o(.text+0x57): undefined reference to `mysql_real_connect' /tmp/ccFKsdPa.o(.text+0x69): undefined reference to `mysql_error' /tmp/ccFKsdPa.o(.text+0x9a): undefined reference to `mysql_close'
Um dieses Problem zu lösen, fügen Sie am Ende Ihres
Link-Befehls -Ldir_path -lmysqlclient
an,
wobei dir_path
den Pfadnamen des
Verzeichnisses darstellt, in dem die Clientbibliothek liegt. Mit
folgendem Befehl können Sie das richtige Verzeichnis
herausfinden:
shell> mysql_config --libs
Die Ausgabe von mysql_config kann auch auf andere Bibliotheken hinweisen, die ebenfalls im Link-Befehl angegeben werden sollten.
Wenn undefined reference
-Fehler für die
Funktion uncompress
oder
compress
gemeldet werden, fügen Sie am Ende
des Link-Befehls -lz
an und versuchen es
erneut.
Treten undefined reference
-Fehler im
Zusammenhang mit einer Funktion auf, die auf Ihrem System
existieren müsste, wie beispielsweise
connect
, sehen Sie auf der Handbuchseite zu
dieser Funktion nach, um festzustellen, welche Bibliotheken Sie
im Link-Befehl angeben müssen.
Wenn Funktionen auf Ihrem System nicht existieren, werden
undefined reference
-Fehler wie diese
gemeldet:
mf_format.o(.text+0x201): undefined reference to `__lxstat'
Das bedeutet normalerweise, dass Ihre MySQL-Clientbibliothek auf einem System kompiliert wurde, das mit Ihrem nicht zu 100 % kompatibel ist. In diesem Fall sollten Sie die neueste MySQL-Quelldistribution herunterladen und MySQL selbst kompilieren. Siehe Abschnitt 2.8, „Installation der Quelldistribution“.
Zur Laufzeit können undefined
reference
-Fehler auftreten, wenn Sie versuchen, ein
MySQL-Programm auszuführen. Wenn diese Fehler Symbole
betreffen, die mit mysql_
anfangen oder
anzeigen, dass die mysqlclient
-Bibliothek
nicht zu finden ist, so bedeutet dies, dass Ihr System die
Shared Library libmysqlclient.so
nicht
finden kann. Dies beheben Sie, indem Sie Ihr System dort, wo
sich die Bibliothek befindet, nach Shared Libraries suchen
lassen. Aus den folgenden Verfahren können Sie das für Ihr
System geeignete auswählen:
Sie fügen den Pfad zu dem Verzeichnis, in dem
libmysqlclient.so
liegt, der
Umgebungsvariablen LD_LIBRARY_PATH
hinzu.
Sie fügen den Pfad zu dem Verzeichnis, in dem
libmysqlclient.so
liegt, der
Umgebungsvariablen LD_LIBRARY
hinzu.
Sie kopieren libmysqlclient.so
in ein
Verzeichnis, in dem Ihr System nachschaut, wie
beispielsweise /lib
, und aktualisieren
die Shared Library-Informationen, indem Sie
ldconfig
ausführen.
Sie können dieses Problem auch angehen, indem Sie Ihr Programm
statisch mit der Option -static
verlinken
oder indem Sie die dynamischen MySQL-Bibliotheken entfernen,
bevor Sie Ihren Code verlinken. Ehe Sie die zweite Methode
wählen, müssen Sie sich vergewissern, dass keine anderen
Programme die dynamischen Bibliotheken benutzen.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.