| 2.3 Installation de MySQL avec une distribution source
 2 Installer MySQL
 Manuel de Référence MySQL 4.1 : Version Française
 
 . Installation depuis les sources : présentation
 . Options habituelles de configure
 . Installer à partir de l'arbre source de développement
 ->Problèmes de compilation?
 . Notes relatives aux MIT-pthreads
 . La distribution source Windows
 . Compiler les clients MySQL sous Windows
 
 
 | 
  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 :
 
Pour éviter d'utiliser de vieilles informations de configuration, ou des vieux fichiers
d'objet, vous pouvez utiliser ces commandes, avant  
configure
  :
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.
 Alternativement, vous pouvez aussi utiliser  
make distclean
 .La liste suivante décrit certains problèmes lors de la compilation de MySQL,
qui surviennent souvent :| 
shell> rm config.cacheshell> make clean
 | 
 
      
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 :  
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
  :| 
Internal compiler error: program cc1plus got fatal signal 11Out of virtual memory
 Virtual memory exhausted
 | 
 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.| 
shell> ./configure --with-low-memory
 | 
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 :   
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 :| 
configure: error: installation or configuration problem:C++ compiler cannot create executables.
 | 
 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.| 
shell> CXX="gcc -O3" ./configure
 | 
   
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
 : 
ou :| 
making all in mit-pthreadsmake: Fatal error in reader: Makefile, line 18:
 Badly formed macro assignment
 | 
 ou :| 
make: file `Makefile' line 18: Must be a separator (:
 | 
 Solaris et FreeBSD sont connus pour avoir des problèmes avec  
make
 .GNU  
make
  version 3.75 est reconnu pour fonctionner.| 
pthread.h: No such file or directory
 | 
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 : 
Voyez  Les compiliations de MySQL par MySQL AB , pour avoir une liste des définitions des options disponibles
sur divers systèmes.| 
shell> CC=gccshell> CFLAGS=-O3
 shell> CXX=gcc
 shell> CXXFLAGS=-O3
 shell> export CC CFLAGS CXX CXXFLAGS
 | 
Si vous obtenez un message d'erreur comme celui-ci, vous devrez
mettre à jour votre version de  
gcc
  : 
gcc
  2.8.1 est connu pour fonctionner, mais nous recommandons l'utilisation de 
 
gcc
  2.95.2 ou  
egcs
  1.0.3a.| 
client/libmysql.c:273: parse error before `__attribute__'
 | 
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()
  : 
Pour corriger ce problème, éditez le fichier  
config.h
  (qui est généré par
le fichier  
configure
 ). Recherchez ces lignes :| 
cxx: Error: mysqld.cc, line 645: In this statement, the referencedtype of the pointer value "&length" is "unsigned long", which
 is not compatible with "int".
 new_sock = accept(sock, (struct sockaddr *)&cAddr, &length);
 | 
 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
 .| 
/* Define as the base type of the last arg to accept */#define SOCKET_SIZE_TYPE XXX
 | 
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 :  
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.| 
"sql_yacc.yy", line xxx fatal: default action causes potential...
 | 
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 :  
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 :| 
libmysql.c:1329: warning: passing arg 5 of `gethostbyname_r' fromincompatible 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
 | 
 
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
 :
 
 
Notez bien que vous devez lancer  
configure
  après cela.
 |