(mysql.info.gz) Perl support problems
Info Catalog
(mysql.info.gz) ActiveState Perl
(mysql.info.gz) Perl support
2.13.3 Problems Using the Perl `DBI'/`DBD' Interface
----------------------------------------------------
If Perl reports that it can't find the `../mysql/mysql.so' module, then
the problem is probably that Perl can't locate the shared library
`libmysqlclient.so'.
You should be able to fix this by one of the following methods:
* Compile the `DBD::mysql' distribution with `perl Makefile.PL
-static -config' rather than `perl Makefile.PL'.
* Copy `libmysqlclient.so' to the directory where your other shared
libraries are located (probably `/usr/lib' or `/lib').
* Modify the `-L' options used to compile `DBD::mysql' to reflect
the actual location of `libmysqlclient.so'.
* On Linux, you can add the pathname of the directory where
`libmysqlclient.so' is located to the `/etc/ld.so.conf' file.
* Add the pathname of the directory where `libmysqlclient.so' is
located to the `LD_RUN_PATH' environment variable. Some systems use
`LD_LIBRARY_PATH' instead.
Note that you may also need to modify the `-L' options if there are
other libraries that the linker fails to find. For example, if the
linker cannot find `libc' because it is in `/lib' and the link command
specifies `-L/usr/lib', change the `-L' option to `-L/lib' or add
`-L/lib' to the existing link command.
If you get the following errors from `DBD::mysql', you are probably
using `gcc' (or using an old binary compiled with `gcc'):
/usr/bin/perl: can't resolve symbol '__moddi3'
/usr/bin/perl: can't resolve symbol '__divdi3'
Add `-L/usr/lib/gcc-lib/... -lgcc' to the link command when the
`mysql.so' library gets built (check the output from `make' for
`mysql.so' when you compile the Perl client). The `-L' option should
specify the pathname of the directory where `libgcc.a' is located on
your system.
Another cause of this problem may be that Perl and MySQL aren't both
compiled with `gcc'. In this case, you can solve the mismatch by
compiling both with `gcc'.
You may see the following error from `DBD::mysql' when you run the
tests:
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.
This means that you need to include the `-lz' compression library on the
link line. That can be done by changing the following line in the file
`lib/DBD/mysql/Install.pm':
$sysliblist .= " -lm";
Change that line to:
$sysliblist .= " -lm -lz";
After this, you _must_ run `make realclean' and then proceed with the
installation from the beginning.
If you want to install DBI on SCO, you have to edit the `Makefile' in
DBI-XXX and each subdirectory. Note that the following assumes `gcc'
2.95.2 or newer:
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
These changes are necessary because the Perl dynaloader will not load
the `DBI' modules if they were compiled with `icc' or `cc'.
If you want to use the Perl module on a system that doesn't support
dynamic linking (such as SCO), you can generate a static version of
Perl that includes `DBI' and `DBD::mysql'. The way this works is that
you generate a version of Perl with the `DBI' code linked in and
install it on top of your current Perl. Then you use that to build a
version of Perl that additionally has the `DBD' code linked in, and
install that.
On SCO, you must have the following environment variables set:
LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib
Or:
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:
First, create a Perl that includes a statically linked `DBI' module by
running these commands in the directory where your `DBI' distribution is
located:
shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl
Then you must install the new Perl. The output of `make perl' will
indicate the exact `make' command you will need to execute to perform
the installation. On SCO, this is `make -f Makefile.aperl inst_perl
MAP_TARGET=perl'.
Next, use the just-created Perl to create another Perl that also
includes a statically linked `DBD::mysql' by running these commands in
the directory where your `DBD::mysql' distribution is located:
shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl
Finally, you should install this new Perl. Again, the output of `make
perl' indicates the command to use.
Info Catalog
(mysql.info.gz) ActiveState Perl
(mysql.info.gz) Perl support
automatically generated byinfo2html