Alle MySQL-Programme lassen sich bei uns mit gcc sauber und ohne Warnungen unter Solaris oder Linux kompilieren. Auf anderen Systemen werden aufgrund von Unterschieden in den systemspezifischen Include-Dateien unter Umständen Warnungen angezeigt. Informationen dazu, welche Warnungen bei der Verwendung von MIT-pthreads angezeigt werden können, finden Sie in Abschnitt 2.8.5, „Anmerkungen zu MIT-pthreads“. Informationen zu anderen Problemen entnehmen Sie der folgenden Liste.
Die Lösung zahlreicher Probleme erfordert eine Umkonfiguration. Wenn Sie eine Umkonfiguration durchführen müssen, beachten Sie bitte die folgenden Hinweise:
Wird configure nach einem vorherigen
Aufruf erneut ausgeführt, dann werden unter Umständen
Daten zugrunde gelegt, die während des vorherigen Aufrufs
ermittelt worden waren. Diese Informationen sind in der
Datei config.cache
abgelegt. Nach dem
Start prüft configure auf das
Vorhandensein dieser Datei und liest ihren Inhalt ggf. aus
– davon ausgehend, dass die Daten nach wie vor korrekt
sind. Dies ist allerdings bei einer Umkonfigurierung nicht
mehr der Fall.
Jedes Mal, wenn Sie configure ausführen, müssen Sie zur Neukompilierung auch make erneut ausführen. Allerdings sollten Sie alte Objektdateien aus vorherigen Builds entfernen, da diese mit abweichenden Konfigurationsoptionen erstellt wurden.
Um die Verwendung veralteter Konfigurationsdaten oder Objektdateien zu verhindern, führen Sie die folgenden Befehle aus, bevor Sie configure erneut aufrufen:
shell>rm config.cache
shell>make clean
Alternativ können Sie auch make distclean ausführen.
Die folgende Liste enthält die bei der Kompilierung von MySQL am häufigsten auftretenden Probleme:
Wenn Sie bei der Kompilierung von
sql_yacc.cc
Fehler wie die hier
aufgeführten erhalten, ist offensichtlich nicht genug
Arbeits- oder Auslagerungsspeicher vorhanden.
Internal compiler error: program cc1plus got fatal signal 11 Out of virtual memory Virtual memory exhausted
Das Problem besteht darin, dass gcc zur
Kompilierung von sql_yacc.cc
mit
Inline-Funktionen eine gewaltige Menge Speicher benötigt.
Versuchen Sie in diesem Fall, configure
mit der Option --with-low-memory
auszuführen:
shell> ./configure --with-low-memory
Diese Option ergänzt die Kompilierungszeile um den Eintrag
-fno-inline
, wenn Sie
gcc verwenden, bzw. um
-O0
bei Verwendung eines anderen Tools. Sie
sollten die Option --with-low-memory
auch
dann verwenden, wenn Sie der Ansicht sind, dass so viel
Arbeits- und Auslagerungsspeicher vorhanden ist, dass ein
Speichermangel nicht wahrscheinlich ist. Dieses Problem
wurde sogar schon auf Systemen mit wirklich großzügigen
Hardwarekonfigurationen beobachtet und konnte stets mit der
Option --with-low-memory
behoben werden.
Standardmäßig wählt configure
c++ als Compiler-Namen aus, und GNU
c++ verknüpft sich mit
-lg++
. Wenn Sie gcc
verwenden, dann kann dieses Verhalten während der
Konfiguration zu Problemen wie dem folgenden führen:
configure: error: installation or configuration problem: C++ compiler cannot create executables.
Ferner könnten Sie während der Kompilierung Probleme in
Bezug auf g++, libg++
oder libstdc++
beobachten.
Eine Ursache dieser Probleme besteht darin, dass Sie
g++ entweder nicht haben oder dass Sie
g++, nicht jedoch
libg++
oder libstdc++
haben. Werfen Sie einen Blick in die Datei
config.log
. Sie sollten den Grund
dafür, dass Ihr C++-Compiler nicht funktioniert, exakt
angeben. Um derartige Probleme zu vermeiden, können Sie
gcc als C++-Compiler verwenden. Setzen
Sie die Umgebungsvariable CXX
versuchsweise auf "gcc -O3"
.
Ein Beispiel:
shell> CXX="gcc -O3" ./configure
Dies funktioniert, weil gcc
C++-Quelldateien ebenso kompiliert, wie es
g++ tut, jedoch standardmäßig keine
Verknüpfung mit libg++
oder
libstdc++
herstellt.
Eine andere Möglichkeit, diese Probleme zu beheben, besteht
in der Installation von g++,
libg++
und libstdc++
.
Allerdings raten wir von der Verwendung von
libg++
oder libstdc++
mit MySQL ab, da hierdurch nur die
mysqld-Binärdatei vergrößert wird –
Vorteile ergeben sich ansonsten keine. In Verbindung mit
einigen Versionen dieser Bibliotheken sind bei
MySQL-Benutzern in der Vergangenheit nicht nachvollziehbare
Probleme aufgetreten.
Bricht Ihre Kompilierung mit Fehlern wie dem folgenden ab, dann müssen Sie Ihre make-Version auf GNU make aktualisieren:
making all in mit-pthreads make: Fatal error in reader: Makefile, line 18: Badly formed macro assignment
Oder:
make: file `Makefile' line 18: Must be a separator (:
Oder:
pthread.h: No such file or directory
Es ist bekannt, dass Solaris und FreeBSD problematische make-Programme umfassen.
GNU make 3.75 funktioniert erfahrungsgemäß.
Wenn Sie Flags für die Verwendung durch Ihre C- oder
C++-Compiler definieren wollen, sollten Sie dies tun, indem
Sie die Flags den Umgebungsvariablen
CFLAGS
und CXXFLAGS
hinzufügen. Sie können auf diese Weise auch die
Compiler-Namen über CC
und
CXX
angeben. Ein Beispiel:
shell>CC=gcc
shell>CFLAGS=-O3
shell>CXX=gcc
shell>CXXFLAGS=-O3
shell>export CC CFLAGS CXX CXXFLAGS
In Abschnitt 2.1.2.5, „MySQL-Binärdistributionen, die von MySQL AB kompiliert wurden“, finden Sie eine Liste der Flag-Definitionen, die sich bei verschiedenen Systemen als nützlich erwiesen haben.
Wenn Sie bei der Kompilierung von mysqld
Fehlermeldungen wie die nachfolgend gezeigte erhalten, hat
configure den Typ des letzten Arguments
von accept()
,
getsockname()
oder
getpeername()
nicht korrekt erkannt:
cxx: Error: mysqld.cc, line 645: In this statement, the referenced type of the pointer value ''length'' is ''unsigned long'', which is not compatible with ''int''. new_sock = accept(sock, (struct sockaddr *)&cAddr, &length);
Um dieses Problem zu beheben, bearbeiten Sie die Datei
config.h
(diese wird durch
configure erzeugt). Suchen Sie dort nach
den folgenden Zeilen:
/* Define as the base type of the last arg to accept */ #define SOCKET_SIZE_TYPE XXX
Setzen Sie XXX
je nach Betriebssystem auf
size_t
oder int
. (Sie
müssen dies bei jeder Ausführung von
configure tun, da
configure config.h
immer neu erstellt.)
Die Datei sql_yacc.cc
wird aus
sql_yacc.yy
erstellt. Normalerweise
muss bei der Erstellung keine Datei
sql_yacc.cc
erzeugt werden, da MySQL
bereits eine vorab generierte Kopie enthält. Sofern Sie sie
aber trotzdem neu erstellen müssen, könnte unter
Umständen folgende Fehlermeldung angezeigt werden:
"sql_yacc.yy", line xxx
fatal: default action causes potential ...
Dies weist darauf hin, dass Ihre Version von yacc fehlerhaft ist. Sie müssen stattdessen wahrscheinlich bison (die GNU-Variante von yacc) installieren und verwenden.
Unter Debian Linux 3.0 müssen Sie gawk
anstelle des standardmäßigen mawk
installieren, wenn Sie MySQL mit Berkeley DB-Unterstützung
kompilieren wollen.
Wenn Sie mysqld oder einen MySQL-Client
debuggen müssen, führen Sie configure
mit der Option --with-debug
aus.
Kompilieren Sie Ihre Clients dann neu und verknüpfen Sie
sie mit der neuen Clientbibliothek. Siehe auch
Abschnitt E.2, „Einen MySQL-Client debuggen“.
Unter Umständen erhalten Sie unter Linux (z. B. bei SuSE Linux 8.1 oder Red Hat Linux 7.3) einen Kompilierungsfehler ähnlich dem folgenden:
libmysql.c:1329: warning: passing arg 5 of `gethostbyname_r' from incompatible pointer type libmysql.c:1329: too few arguments to function `gethostbyname_r' libmysql.c:1329: warning: assignment makes pointer from integer without a cast make[2]: *** [libmysql.lo] Error 1
Standardmäßig versucht das configure-Skript, die korrekte Anzahl der Argumente mithilfe des GNU C++-Compilers g++ zu ermitteln. Dieser Test führt zu falschen Ergebnissen, wenn g++ nicht installiert ist. Es gibt zwei Möglichkeiten, dieses Problem zu umgehen:
Stellen Sie sicher, dass der GNU-C++-Compiler
g++ installiert ist. Bei manchen
Linux-Distributionen heißt das erforderliche Paket
gpp
, bei anderen
gcc-c++.
Verwenden Sie gcc als C++-Compiler,
indem Sie die Umgebungsvariable CXX
auf gcc setzen:
export CXX="gcc"
Welche Änderungen Sie auch immer durchgeführt haben, nachfolgend müssen Sie configure erneut ausführen.
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.