2.3 Installer MySQL `a partir des sources
2.3.5 Probl`emes de compilation?
Tous les programmes MySQL compilent proprement chez nous, sans aucune alerte sur Solaris avec gcc. Sur d’autres syst`emes, des alertes peuvent apparaˆitre `a cause de diff´erences dans le syst`eme d’inclusions. Voyez Section 2.3.6 [MIT-pthreads], page 95 pour les alertes qui peuvent apparaˆitre avec MIT-pthreads. Pour d’autres probl`emes, voyez la liste suivante. La solution `a de nombreux probl`emes implique une reconfiguration. Si vous avez besoin de faire une reconfiguration voici quelques conseils g´en´eraux :
• Si configure est ex´ecut´e apr`es une premi`ere ex´ecution, il peut utiliser des informations
qui ont ´et´e rassembl´ees durant une premi`ere invocation. Ces informations sont stock´ees dans le fichier ‘config.cache’. Lorsque configure est lanc´e, il commence par regarder dans ce fichier, et lire le contenu qui existe, en supposant que ces donn´ees sont toujours correctes. Cette supposition est invalide si vous faˆites une reconfiguration.
• Chaque fois que vous ex´ecutez configure, vous devez ex´ecuter `a nouveau make pour
recompiler. Toutefois, vous devrez peut ˆetre supprimer les vieux fichiers d’objets qui ont ´et´e compil´e en utilisant diff´erentes configurations pr´ec´edentes.
Pour ´eviter 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´ecrit certains probl`emes lors de la compilation de MySQL, qui surviennent souvent :
• Si vous avez des probl`emes lors de la compilation de ‘sql_yacc.cc’, comme ceux qui
sont d´ecrits ci-dessous, vous avez probablement ´et´e `a court de m´emoire 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`eme est que gcc requiert de grandes quantit´e de m´emoire pour compiler ‘sql_yacc.cc’ avec les fonctions inline. Essayez d’ex´ecuter 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ˆeme si il vous reste suffisamment de m´emoire, et que vous ne pensez pas ˆetre limit´e. Ce probl`eme a ´et´e observ´e sur des syst`emes avec de g´en´ereuses configurations, et --with- low-memory r´esout ce probl`eme.
• Par d´efaut, configure choisit c++ comme compilateur, et GNU c++ pour les liens avec
-lg++. Si vous utilisez gcc, ce comportement peut poser les probl`emes suivants : configure: error: installation or configuration problem:
C++ compiler cannot create executables.
Vous pourriez aussi observer des probl`emes durant la compilation, avec g++, libg++ ou libstdc++.
La cause de ces probl`emes est que vous avez peut ˆetre 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ˆurement contenir la raison exacte du mauvais fonctionnement de votre compila- teur. Pour contourner ce probl`eme, 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´e avec libg++ ou libstdc++ par d´efaut.
Un autre moyen pour r´egler ces probl`emes, 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ˆitre la taille de votre ex´ecutable binaire, sans vous apporter d’avantages. Par le pass´e, certaines versions de ces librairies ont pos´e des probl`emes ´etranges aux utilisateurs MySQL.
• Si votre compilation ´echoue avec des erreurs, ou si l’une des erreurs suivantes apparaˆit,
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`emes avec make. GNU make version 3.75 est reconnu pour fonctionner.
• Si vous voulez d´efinir des options suppl´ementaires qui seront utilis´ees par votre compi-
lateur C ou C++, faites le en ajoutant ces options aux variables d’environnement CFLAGS et CXXFLAGS. Vous pouvez aussi sp´ecifier 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 Section 2.2.7 [MySQL binaries], page 80, pour avoir une liste des d´efinitions des options disponibles sur divers syst`emes.
• Si vous obtenez un message d’erreur comme celui-ci, vous devrez mettre `a 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´ees ci-dessous lors de la
compilation de mysqld, c’est que configure n’a pas correctement d´etecter 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`eme, ´editez le fichier ‘config.h’ (qui est g´en´er´e 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`eme d’exploitation. Notez que vous devrez faire cette manipulation `a chaque fois que vous ex´ecuterez le script configure car configure reg´en`ere ‘config.h’.
• Le fichier ‘sql_yacc.cc’ est g´en´er´e `a partir du fichier ‘sql_yacc.yy’. Normalement,
le processus de cr´eation ne s’occupe pas de ‘sql_yacc.cc’, car MySQL en a d´ej`a une copie. Cependant, si vous devez le recr´eer, vous pouvez rencontrer cette erreur :
"sql_yacc.yy", line xxx fatal: default action causes potential... Cela indique que votre version de yacc est inad´equate. Vous devrez probablement r´einstaller bison (la version GNU de yacc) et l’utiliser `a la place.
• Si vous avez besoin de d´eboguer mysqld ou un client MySQL, ex´ecutez le script
configure avec l’option --with-debug, puis recompilez vos clients avec la nouvelle librairie. Voir Section E.2 [Debugging client], page 820.