• Aucun résultat trouvé

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 .