2.3 Installer MySQL à partir des sources
2.3.5 Problèmes de compilation?
Tous les programmes MySQL compilent proprement chez nous, sans aucune alerte sur Solaris avec gcc
. Sur d'autres systèmes, des alertes peuvent apparaître à cause de différences dans le système d'inclusions. Voyez Remarques sur MIT−pthreads pour les alertes qui peuvent apparaître avec MIT−pthreads. Pour d'autres problèmes, voyez la liste suivante.
La solution à de nombreux problèmes implique une reconfiguration. Si vous avez besoin de faire une reconfiguration voici quelques conseils généraux :
Si configure
est exécuté après une première exécution, il peut utiliser des informations qui ont été rassemblées durant une première invocation. Ces informations sont stockées dans le fichier config.cache
. Lorsque configure
est lancé, il commence par regarder dans ce fichier, et lire le contenu qui existe, en supposant que ces données sont toujours correctes. Cette
supposition est invalide si vous faîtes une reconfiguration.
•
Chaque fois que vous exécutez configure
, vous devez exécuter à nouveau make
pour
recompiler. Toutefois, vous devrez peut être supprimer les vieux fichiers d'objets qui ont été compilé en utilisant différentes configurations précédentes.
•
Pour éviter d'utiliser de vieilles informations de configuration, ou des vieux fichiers d'objet, vous pouvez utiliser ces commandes, avant configure
:
shell> rm config.cache shell> make clean
Alternativement, vous pouvez aussi utiliser make distclean
.La liste suivante décrit certains problèmes lors de la compilation de MySQL, qui surviennent souvent :
Si vous avez des problèmes lors de la compilation de sql_yacc.cc
, comme ceux qui sont décrits ci−dessous, vous avez probablement été à court de mémoire ou d'espace de swap :
Internal compiler error: program cc1plus got fatal signal 11 ou
Out of virtual memory ou
Virtual memory exhausted
Le problème est que gcc
requiert de grandes quantité de mémoire pour compiler sql_yacc.cc
avec les fonctions inline. Essayez d'exécuter configure
avec l'option −−with−low−memory
:
shell> ./configure −−with−low−memory
Cette option ajoute −fno−inline
dans la ligne de compilation, si vous utilisez gcc
et −O0
si vous utilisez autre chose. Vous pouvez essayer −−with−low−memory
même si il vous reste suffisamment de mémoire, et que vous ne pensez pas être limité. Ce problème a été observé sur des systèmes avec de généreuses configurations, et −−with−low−memory
résout ce problème.
•
Par défaut, configure
choisit c++
comme compilateur, et GNU c++
pour les liens avec −lg++
. Si vous utilisez gcc
, ce comportement peut poser les problèmes suivants :
configure: error: installation or configuration problem: C++ compiler cannot create executables.
Vous pourriez aussi observer des problèmes durant la compilation, avec g++
, libg++
ou libstdc++
.La cause de ces problèmes est que vous avez peut être que vous n'avez pas g++
, ou que vous avez g++
mais pas libg++
, ou libstdc++
. Regardez le fichier de log config.log
. Il va sûrement contenir la raison exacte du mauvais fonctionnement de votre compilateur. Pour contourner ce problème, vous pouvez utiliser gcc
comme compilateur C++. Essayez de modifier la variable d'environnement CXX
avec la valeur "gcc −O3"
. Par exemple :
shell> CXX="gcc −O3" ./configure
Cela fonctionne car gcc
compile les sources C++ aussi bien que g++
, mais il n'est pas lié avec
libg++
ou libstdc++
par défaut.Un autre moyen pour régler ces problèmes, bien sur, est d'installer g++
, libg++
et libstdc++
. Nous vous recommandons toutefois de ne pas utiliser libg++
ou
libstdc++
avec MySQL car cela ne fera qu'accroître la taille de votre exécutable binaire, sans vous apporter d'avantages. Par le passé, certaines versions de ces librairies ont posé des problèmes étranges aux utilisateurs MySQL.
•
Si votre compilation échoue avec des erreurs, ou si l'une des erreurs suivantes apparaît, vous devez changer la version de make
en GNU make
:
making all in mit−pthreads
make: Fatal error in reader: Makefile, line 18: Badly formed macro assignment
ou
make: file `Makefile' line 18: Must be a separator (: ou
pthread.h: No such file or directory
Solaris et FreeBSD sont connus pour avoir des problèmes avec make
. GNU make
version 3.75 est reconnu pour fonctionner.
•
Si vous voulez définir des options supplémentaires qui seront utilisées par votre compilateur C ou C++, faites le en ajoutant ces options aux variables d'environnement CFLAGS
et CXXFLAGS
. Vous pouvez aussi spécifier le nom du compilateur via les variables CC
et CXX . Par exemple : shell> CC=gcc shell> CFLAGS=−O3 shell> CXX=gcc shell> CXXFLAGS=−O3
shell> export CC CFLAGS CXX CXXFLAGS
Voyez MySQL Binaries Compiled by MySQL AB , pour avoir une liste des définitions des options disponibles sur divers systèmes.
•
Si vous obtenez un message d'erreur comme celui−ci, vous devrez mettre à jour votre version de gcc
:
client/libmysql.c:273: parse error before `__attribute__' gcc
2.8.1 est connu pour fonctionner, mais nous recommandons l'utilisation de gcc
2.95.2 ou
egcs
1.0.3a.
•
Si vous obtenez des erreurs telles que celles qui sont affichées ci−dessous lors de la compilation de mysqld
, c'est que configure
n'a pas correctement détecter le dernier argument des fonctions accept()
, getsockname()
ou getpeername()
:
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);
Pour corriger ce problème, éditez le fichier config.h
(qui est généré par le fichier configure
). Recherchez ces lignes :
/* Define as the base type of the last arg to accept */ #define SOCKET_SIZE_TYPE XXX
Remplacez XXX
par size_t
ou int
, suivant votre système d'exploitation. Notez que vous devrez faire cette manipulation à chaque fois que vous exécuterez le script configure
car configure
regénère config.h
.
•
Le fichier sql_yacc.cc
est généré à partir du fichier sql_yacc.yy
. Normalement, le processus de création ne s'occupe pas de sql_yacc.cc
, car MySQL en a déjà une copie. Cependant, si vous devez le recréer, vous pouvez rencontrer cette erreur :
"sql_yacc.yy", line xxx fatal: default action causes potential...
Cela indique que votre version de yacc
est inadéquate. Vous devrez probablement réinstaller
bison
(la version GNU de yacc
) et l'utiliser à la place.
•
Si vous avez besoin de déboguer mysqld
ou un client MySQL, exécutez le script configure
avec l'option −−with−debug
, puis recompilez vos clients avec la nouvelle librairie. Déboguer un client MySQL .
•