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 -config
shell>make
shell>make install
shell>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 -config
shell>make
shell>make install
shell>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.