• Aucun résultat trouvé

Sommaire 27 Historique des changements MySQL

2.3 Installation de MySQL avec une distribution source

2.3.4 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 nouvelle configuration. Si vous avez besoin de refaire une configuration 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 Out of virtual memory

Virtual memory exhausted

Le problème est que gcc

requiert de grandes quantité de mémoire pour compiler sql_yacc.cc

avec les options 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 bibliothèques ont posé des problèmes étranges aux utilisateurs MySQL.

Utiliser gcc

comme compilateur C++ est aussi nécessaire, si vous voulez compiler MySQL avec le support de RAID (voyez CREATE TABLE

Syntax pour plus d'information sur le type de table RAID), ou utilisez GNU gcc

version 3 plus récent. Si vous avez des erreurs de compilation comme celles ci−dessous avec l'option −−with−raid

, essayez d'utiliser gcc

comme compilateur C++ en définissant la variable d'environnement CXX

ci−dessus :

gcc −O3 −DDBUG_OFF −rdynamic −o isamchk isamchk.o sort.o libnisam.a ../mysys/libmysys.a ../dbug/libdbug.a ../strings/libmystrings.a −lpthread −lz −lcrypt −lnsl −lm −lpthread

../mysys/libmysys.a(raid.o)(.text+0x79): In function

`my_raid_create':: undefined reference to `operator new(unsigned)' ../mysys/libmysys.a(raid.o)(.text+0xdd): In function

`my_raid_create':: undefined reference to `operator delete(void*)' ../mysys/libmysys.a(raid.o)(.text+0x129): In function

`my_raid_open':: undefined reference to `operator new(unsigned)' ../mysys/libmysys.a(raid.o)(.text+0x189): In function

`my_raid_open':: undefined reference to `operator delete(void*)' ../mysys/libmysys.a(raid.o)(.text+0x64b): In function

`my_raid_close':: undefined reference to `operator delete(void*)' collect2: ld returned 1 exit status

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 Les compiliations de MySQL par 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.

Sur Debian Linux 3.0, vous devez installer gawk

au lieu du programme par défaut mawk

si vous voulez compiler MySQL 4.1 ou plus récent avec le support Berkeley DB

.

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 bibliothèque. Déboguer un client MySQL .

Si vous rencontrez une erreur de compilation sous Linux (e.g. SuSE Linux 8.1 ou Red Hat Linux 7.3) similaire à celle−ci :

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

Par défaut, le script configure

tente de déterminer le nombre correct d'argument en utilisant g++

, le compilateur GNU C++. Ce test retourne des résultats erroné si g++

n'est pas installé. Il y a deux façons de contourner le problème :

Assurez vous que GNU C++ g++

est installé. Sur certains Linux, le paquet nécessaire est appelé gpp

, et sur d'autres, c'est gcc−c++

.

Utilisez gcc

comme compilateur C++ en mettant donnant à la variable d'environnement CXX

, la valeur de gcc

:

export CXX="gcc"

Notez bien que vous devez lancer configure

après cela.