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.cacheshell>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=gccshell>CFLAGS=-O3shell>CXX=gccshell>CXXFLAGS=-O3shell>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.

