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
:
Notez bien que vous devez lancer
configure
après cela.
|