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
Section 2.4.5, « Notes relatives aux 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 Section 13.2.5, « 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 Section 2.1.2.5, « Binaires compilés 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. See
Section D.2, « Débogage 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.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.