• Aucun résultat trouvé

Probl`emes de compilation?

Dans le document Manuel MySQL pdf enjeux et pratiques (Page 117-120)

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.

Dans le document Manuel MySQL pdf enjeux et pratiques (Page 117-120)