Si Perl anuncia que no puede encontrar el módulo
../mysql/mysql.so, entonces el problema
probablemente sea que Perl no ha podido encontrar la biblioteca
compartida libmysqlclient.so.
Esto debería poder solucionarse a través de alguno de los siguientes métodos:
Compilar la distribución DBD::mysql con
perl Makefile.PL -static -config en lugar
de perl Makefile.PL.
Copiar libmysqlclient.so al directorio
donde se ubican las demás bibliotecas compartidas
(probablemente, /usr/lib or
/lib).
Modificar las opciones -L utilizadas para
compilar DBD::mysql para que reflejen la
ubicación real de libmysqlclient.so.
En Linux, puede agregarse al fichero
/etc/ld.so.conf la ruta donde se
localiza libmysqlclient.so.
Agregar a la variable de entorno
LD_RUN_PATH el directorio donde se ubica
libmysqlclient.so. Algunos sistemas
utilizan LD_LIBRARY_PATH en lugar de
LD_RUN_PATH.
Hay que notar que si hay otras bibliotecas que el enlazador no
puede hallar, se necesitarán modificar las opciones
-L. Por ejemplo, si no se puede hallar
libc porque está en el directorio
/lib y el enlazador está especificando
-L/usr/lib, hay que cambiar la opción
-L para que sea -L/lib o
agregar -L/lib al comando de enlazado
existente.
Si se obtienen los siguientes errores de
DBD::mysql, probablemente se está utilizando
gcc (o un binario antiguo compilado con
gcc):
/usr/bin/perl: can't resolve symbol '__moddi3' /usr/bin/perl: can't resolve symbol '__divdi3'
Agregar -L/usr/lib/gcc-lib/... -lgcc al
comando de enlazado cuando se compila
mysql.so (verificar la salida de
make para mysql.so al
compilar el cliente Perl). La opción -L
debería especificar la ruta donde se localiza
libgcc.a.
Otra causa de este problema es que Perl y MySQL no estén compilados (ambos) con gcc. En este caso, se puede resolver la desigualdad compilando a los dos con gcc.
Al ejecutar las pruebas, puede verse el siguiente error de
DBD::mysql:.
t/00base............install_driver(mysql) failed: Can't load '../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: ../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol: uncompress at /usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169.
Esto significa que se necesita incluir la biblioteca de
compresión -lz en la línea de enlazado.
Puede hacerse cambiando la siguiente linea en el fichero
lib/DBD/mysql/Install.pm.
Copiar libmysqlclient.so al directorio
donde se ubican las otras bibliotecas compartidas
(probablemente, /usr/lib or
/lib).
Modificar las opciones -L usadas para
compilar DBD::mysql para que reflejen la
ubicación real de libmysqlclient.so.
En Linux, puede agregarse al fichero
/etc/ld.so.conf la ruta donde se localiza
libmysqlclient.so.
Agregar a la variable de entorno LD_RUN_PATH
el directorio donde se ubica
libmysqlclient.so. Algunos sistemas
utilizan LD_LIBRARY_PATH en lugar de
LD_RUN_PATH.
Hay que notar que si hay otras bibliotecas que el enlazador no
puede hallar, se necesitarán modificar las opciones
-L. Por ejemplo, si no se puede hallar
libc:
$sysliblist .= " -lm";
Cambiar la línea a:
$sysliblist .= " -lm -lz";
Despues de esto, debe ejecutarse make realclean y proceder con la instalación desde el principio.
Si se desea isntalar DBI en SCO, se tendrá que editar el
fichero Makefile en
DBI-xxx y en cada subdirectorio.
Notar que lo que sigue asume que se tiene gcc
2.95.2 o posterior:
OLD: NEW: CC = cc CC = gcc CCCDLFLAGS = -KPIC -W1,-Bexport CCCDLFLAGS = -fpic CCDLFLAGS = -wl,-Bexport CCDLFLAGS = LD = ld LD = gcc -G -fpic LDDLFLAGS = -G -L/usr/local/lib LDDLFLAGS = -L/usr/local/lib LDFLAGS = -belf -L/usr/local/lib LDFLAGS = -L/usr/local/lib LD = ld LD = gcc -G -fpic OPTIMISE = -Od OPTIMISE = -O1 OLD: CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include NEW: CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include
Estos cambios se necesitan porque el cargador dinámico
(dynaloader) de Perl no cargará los módulos
DBI si fueron compilados con
icc o cc.
Si se desea utilizar el módulo Perl en un sistema que no posee
soporte para enlazado dinámico (como SCO), se deberá generar
una versión estática de Perl que incluya
DBI y DBD::mysql. La forma
en que esto funciona es: se genera una versión de Perl con el
código DBI enlazado y se la instala por
encima del Perl actual. Luego se lo utiliza para compilar una
versión de Perl que adicionalmente tiene incluído el código
de DBD, y se lo instala.
En SCO, se deberán configurar las siguientes variables de entorno:
LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib
O bien:
LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\
/usr/progressive/lib:/usr/skunk/lib
LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\
/usr/progressive/lib:/usr/skunk/lib
MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:\
/usr/skunk/man:
En primer lugar hay que crear un Perl que incluya un módulo
DBI enlazado estáticamente mediante la
ejecución de estos comandos en el directorio donde se ubica la
distribución de DBI:
shell>perl Makefile.PL -static -configshell>makeshell>make installshell>make perl
Luego debe instalarse el nuevo Perl. La salida de make perl indica exactamente el comando make necesario para llevar a cabo la instalación. En SCO, este es make -f Makefile.aperl inst_perl MAP_TARGET=perl.
A continuación, emplear el recién creado Perl para crear otro
Perl que tmabién incluya un DBD::mysql
creado estáticamente, mediante la ejecución de estos comandos
en el directorio donde se ubica la distribución
DBD::mysql:
shell>perl Makefile.PL -static -configshell>makeshell>make installshell>make perl
Finalmente, se debería instalar este nuevo Perl. De nuevo, la salida de make perl indicará el comando a emplear.
É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.
