Installer à partir de l'arbre source de développement
<<<
Problèmes de compilation? Notes relatives aux MIT-pthreads
>>>

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 :

  • 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 Syntaxe de CREATE TABLE 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.

<< Problèmes de compilation? >>
Installer à partir de l'arbre source de développement Installation de MySQL avec une distribution source Notes relatives aux MIT-pthreads