
Kapitel 9: MySQL-APIs 597
gcc -g -o client test.o -L/usr/local/lib/mysql -lmysqlclient -lsocket -lnsl
Undefined first referenced
symbol in file
floor /usr/local/lib/mysql/libmysqlclient.a(password.o)
ld: fatal: Symbol referencing errors. No output written to client
Wenn das auf Ihrem System passiert, m¨ussen Sie die math-Bibliothek einschließen, indem
Sie -lm am Ende der Kompilier- / Link-Zeile hinzuf¨ugen.
9.4.7 Client-Programme bauen
Wenn Sie MySQL-Clients kompilieren, die Sie selbst geschrieben oder von Dritten erhalten
haben, m¨ussen diese mit der -lmysqlclient -lz-Option f¨ur den Link-Befehl gelinkt wer-
den. Eventuell sollten Sie auch eine -L-Option verwenden, um dem Linker mitzuteilen, wo
sich die Bibliothek befindet. Wenn zum Beispiel die Bibliothek in ‘/usr/local/mysql/lib’
installiert ist, benutzen Sie -L/usr/local/mysql/lib -lmysqlclient -lz f¨ur den Link-
Befehl.
F¨ur Clients, die MySQL-Header-Dateien benutzen, m¨ussen Sie eventuell eine -I-Option
angeben, wenn Sie sie kompilieren (zum Beispiel -I/usr/local/mysql/include), so dass
der Kompiler die Header-Dateien finden kann.
9.4.8 Wie man einen threaded Client herstellt
Die Client-Bibliothek ist fast Thread-sicher. Das gr¨oßte Problem besteht darin, dass die
Subroutinen in ‘net.c’, die von Sockets lesen, nicht Interrupt-sicher sind. Das wurde mit
dem Hintergedanken gemacht, dass Sie eventuell Ihre eigenen Alarme haben m¨ochten, die
ein langes Lesen vom Server unterbrechen k¨onnen. Wenn Sie Interrupt-Handler f¨ur den
SIGPIPE-Interrupt installieren, sollte die Socket-Handhabung Thread-sicher sein.
In den ¨alteren Bin¨ardistributionen wurden die Client-Bibliotheken normalerweise nicht
mit der Thread-sicheren Option kompiliert (die Windows-Bin¨ardateien sind vorgabem¨aßig
Thread-sicher kompiliert). Neuere Bin¨ardistributionen sollten sowohl eine normale als auch
eine Thread-sichere Client-Bibliothek haben.
Um einen threaded Client zu erhalten, bei dem Sie den Client durch andere Threads
unterbrechen (interrupt) und Zeit¨uberschreitungen (Timeouts) setzen k¨onnen, wenn Sie
mit dem MySQL-Server kommunizieren, sollten Sie die -lmysys-, -lstring-, und -ldbug-
Bibliotheken und den net_serv.o-Co de benutzen, den der Server benutzt.
Wenn Sie keine Unterbrechungen (Interrupts) oder Zeit¨uberschreitungen (Timeouts)
ben¨otigen, k¨onnen Sie einfach eine Thread-sicher Client-Bibliothek (mysqlclient_r)
kompilieren und diese benutzen. Siehe Abschnitt 9.4 [MySQL-C-API], Seite 545. In
diesem Fall m¨ussen Sie sich nicht um die net_serv.o-Objektdatei oder die anderen
MySQL-Bibliotheken k¨ummern.
Wenn Sie einen threaded Client benutzen und Unterbrechungen (Interrupts) und
Zeit¨uberschreitungen (Timeouts) benutzen wollen, k¨onnen Sie in umfangreicher Weise
die Routinen in der ‘thr_alarm.c’-Datei benutzen. Wenn Sie Routinen aus der
Comentarios a estos manuales