Todos los programas de MySQL se compilan en Solaris o Linux limpiamente, sin advertencias (warnings), utilizando gcc. En otros sistemas podrían emitirse advertencias debido a diferencias en los ficheros de cabecera del sistema. Consulte Sección 2.8.5, “Notas sobre MIT-pthreads” para advertencias que pueden emitirse al usar MIT-pthreads. Para otros problemas, debe verificarse la siguiente lista.
La solución a muchos problemas incluye la reconfiguración. Si se necesita reconfigurar, hay que tomar nota de lo siguiente:
Si se ejecuta configure después de
habérselo ejecutado anteriormente, éste puede emplear
información recogida durante la primera vez. Esta
información se almacena en
config.cache
. Cuando se inicia
configure, busca aquel fichero y lee su
contenido si existe, suponiendo que la información
continúa siendo válida. Esa suposición es incorrecta
cuando se ha reconfigurado.
Cada vez que se ejecuta configure, se debe ejecutar make nuevamente para recompilar. Sin embargo, primero se podría desear eliminar ficheros objeto antiguos, pertenecientes a procesos de generación anteriores, ya que fueron compilados utilizando diferentes opciones de configuración.
Para evitar que se utilicen información de configuración o ficheros objeto antiguos, deben ejecutarse estos comandos antes de volver a ejecutar configure:
shell> rm config.cache shell> make clean
Alternativamente, puede utilizarse make distclean.
La siguiente lista enumera los problemas más comunes al compilar MySQL:
Si se obtienen errores como los que se muestran cuando se
compila sql_yacc.cc
, probablemente se
trate de memoria insuficiente o espacio de intercambio
insuficiente:
Internal compiler error: program cc1plus got fatal signal 11 Out of virtual memory Virtual memory exhausted
El problema es que gcc necesita enormes
cantidades de memoria para compilar
sql_yacc.cc
con funciones "inline".
Inténtese ejecutar configure con la
opción --with-low-memory
:
shell> ./configure --with-low-memory
Esta opción causa que -fno-inline
se
agregue a los argumentos del compilador si se está
utilizando gcc, y -O0
si se está utilizando cualquier otro. Se debería probar la
opción --with-low-memory
aún si se
tiene tanta cantidad de memoria de espacio de intercambio
que no parece posible que sean insuficientes. Este problema
se ha observado inclusive en sistemas con configuraciones de
hardware generosas. y la opción
--with-low-memory
usualmente lo repara.
Por defecto, configure asume
c++ como nombre del compilador y GNU
c++ enlaza con -lg++
.
Si se está empleando gcc, tal
comportamiento puede causar problemas como este durante la
configuración:
configure: error: installation or configuration problem: C++ compiler cannot create executables.
También se podrían observar problemas durante la
compilacion relacionados con g++,
libg++
, o libstdc++
.
Una causa para estos problemas es que no se tenga
g++, o quizá se tenga
g++ pero no libg++
, o
libstdc++
. Se debe inspeccionar el
fichero config.log
. Este debería
contener el motivo exacto por el cual el compilador de C++
no está funcionando. Para eludir estos problemas, se puede
utilizar gcc como compilador de C++. Debe
ponerse en la variable de entorno CXX
el
valor "gcc -O3"
. Por ejemplo:
shell> CXX="gcc -O3" ./configure
Esto funciona porque gcc compila código
C++ tan bien como g++, pero no enlaza por
defecto con las bibliotecas libg++
o
libstdc++
.
Otra forma de solucionar el problema es instalar
g++, libg++
, y
libstdc++
. Sin embargo, se recomiendo no
emplear libg++
o
libstdc++
con MySQL porque sólo
incrementará el tamaño del ejecutable sin obtener ningún
beneficio. Algunas versiones de estas bibliotecas también
han causado en el pasado problemas extraños a los usuarios
de MySQL.
Si la compilación fallara por errores como cualquiera de los siguientes, se debe actualizar la versión de make a GNU make:
making all in mit-pthreads make: Fatal error in reader: Makefile, line 18: Badly formed macro assignment
O bien:
make: file `Makefile' line 18: Must be a separator (:
O bien:
pthread.h: No such file or directory
Se sabe que los programas make de Solaris y FreeBSD son problemáticos.
La versión 3.75 de GNU make funciona correctamente.
Si se desean definir flags para ser usados por los
compiladores de C o C++, se debe hacer agregando los flags a
las variables de entorno CFLAGS
y
CXXFLAGS
. De este mismo modo pueden
especificarse los nombres del compilador utilizando
CC
y CXX
. Por ejemplo:
shell> CC=gcc shell> CFLAGS=-O3 shell> CXX=gcc shell> CXXFLAGS=-O3 shell> export CC CFLAGS CXX CXXFLAGS
Consulte Sección 2.1.2.5, “Binarios de MySQL compilados por MySQL AB” para una lista de definiciones de flags que han resultado útiles en varios sistemas.
Si se obtiene un mensaje de error como este, se necesitará actualizar el compilador gcc:
client/libmysql.c:273: parse error before `__attribute__'
gcc 2.8.1 funciona correctamente, pero se recomienda utilizar gcc 2.95.2 o egcs 1.0.3a en su lugar.
Si se obtienen errores como los siguientes al compilar
mysqld, configure no
está detectando correctamente el tipo del último argumento
pasado a accept()
,
getsockname()
, o
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);
Para corregir esto, debe modificarse el fichero
config.h
(el cual es generado por
configure). Deben buscarse estas líneas:
/* Define as the base type of the last arg to accept */ #define SOCKET_SIZE_TYPE XXX
Hay que cambiar XXX
por
size_t
o int
,
dependiendo del sistema operativo. (Tener en cuenta que esto
debe hacerse cada vez que se ejecuta
configure, porque este regenera el
fichero config.h
.)
El fichero sql_yacc.cc
se genera a
partir de sql_yacc.yy
. Normalmente el
proceso de compilación no necesita crear
sql_yacc.cc
, porque MySQL viene con una
copia ya generada. Sin embargo, si se necesita crearlo de
nuevo, se podría hallar este error:
"sql_yacc.yy", line xxx
fatal: default action causes potential...
Este es un síntoma de que se posee una versión deficiente de yacc. Posiblemente se necesite instalar en su lugar bison (la versión GNU de yacc).
En Linux Debian 3.0, se necesita instalar
gawk
en lugar del predeterminado
mawk
si se desea compilar MySQL 5.0 con
soporte para Bases de Datos Berkeley.
Si se necesita depurar mysqld o un
cliente MySQL, ejecutar configure con la
opción --with-debug
, luego recompilar y
enlazar los clientes con la nueva biblioteca. Consulte
Sección D.2, “Depuración de un cliente MySQL”.
Si se obtiene un error de compilación en Linux (por ejemplo, en Linux SuSE 8.1 o Linux RedHat 7.2) similar a los siguientes:
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
Por defecto, el script configure intenta determinar el número correcto de argumentos empleando g++, el compilador C++ GNU. Este proceso arroja resultados incorrectos si no está instalado g++. Hay dos formas de solucionar esto:
Asegurarse de que GNU C++ g++ está
instalado. En algunas distribuciones de Linux, el
paquete que se necesita se llama gpp
;
en otras, se llama gcc-c++.
Para utilizar gcc como compilador de
C++ se debe poner en la variable de entorno
CXX
el valor gcc:
export CXX="gcc"
Después debe volver a ejecutarse configure.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.