2.7.4 Проблемы использования интерфейса Perl DBI
/DBD
Если Perl сообщает, что не может найти модуль `../mysql/mysql.so', то
проблема, возможно, заключается в том, что Perl не может найти
динамическую библиотеку `libmysqlclient.so'.
Эту проблему можно устранить, используя любой из следующих методов:
-
Для сборки дистрибутива
Msql-Mysql-modules
используйте perl
Makefile.PL -static -config
вместо perl Makefile.PL
.
-
Скопируйте `libmysqlclient.so' в каталог, где находятся другие
динамические библиотеки (`/usr/lib' или `/lib').
-
Под Linux можно добавить путь к каталогу, где находится
`libmysqlclient.so' в файл `/etc/ld.so.conf'.
-
Добавьте каталог, в котором находится `libmysqlclient.so', в
переменную окружения
LD_RUN_PATH
.
Если вы получаете от DBD-mysql
представленные ниже ошибки, то, скорее
всего, у вас используется компилятор gcc
(или старый бинарный код,
скомпилированный с gcc
):
/usr/bin/perl: can't resolve symbol '__moddi3'
/usr/bin/perl: can't resolve symbol '__divdi3'
Добавьте в команду линкования при сборке библиотеки `mysql.so',
-L/usr/lib/gcc-lib/... -lgcc
(нужно проверить вывод из make
для
`mysql.so' при компиляции клиента Perl). Опция -L
должна указывать путь
к каталогу, где находится `libgcc.a' в вашей системе.
Еще одна причина появления ошибок может заключаться в том, что оба модуля
- Perl и MySQL не скомпилированы вместе компилятором gcc
. В этом случае
данное несоответствие можно устранить, скомпилировав оба модуля
компилятором gcc
.
Если при выполнении тестов вы получаете от модуля Msql-Mysql-modules
следующие ошибки:
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,
то это означает, что в строку линкования необходимо включить библиотеку
сжатия -lz
. Для этого необходимо внести следующее изменение в файл
`lib/DBD/mysql/Install.pm':
$sysliblist .= " -lm";
на
$sysliblist .= " -lm -lz";
После этого необходимо выполнить команду make realclean
и затем
повторить процесс инсталляции сначала.
Если вы хотите использовать эти модули в системе, которая не поддерживает
динамического линкования (вроде Caldera/SCO), то можно сгенерировать
статическую версию Perl, включающую DBI
и DBD-mysql
. Она будет работать
следующим образом: нужно создать версию Perl, слинкованную с кодом DBI
, и
установить ее поверх текущего Perl. Затем эта версия используется для
сборки версии Perl, которая дополнительно включает слинкованный код DBD, и
устанавливается уже она.
В операционной системе Caldera (SCO) необходимо иметь следующий набор
переменных окружения:
shell> LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib
или
shell> LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\
/usr/progressive/lib:/usr/skunk/lib
shell> LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\
/usr/progressive/lib:/usr/skunk/lib
shell> MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:\
/usr/skunk/man:
Вначале следует создать модуль Perl, включающий статически слинкованный
DBI
. Это делается путем выполнения следующих команд в каталоге, где
располагается дистрибутив DBI
:
shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl
Затем необходимо установить новый модуль Perl. Вывод команды make perl
укажет точную команду make
, которую необходимо будет выполнить для
завершения установки. Для Caldera (SCO) это будет команда make -f
Makefile.aperl inst_perl MAP_TARGET=perl
.
Затем нужно использовать только что созданный модуль Perl для создания еще
одного модуля Perl, который также включает в себя статически слинкованный
модуль DBD::mysql
. Это делается путем выполнения следующих команд в
каталоге, где располагается дистрибутив Msql-Mysql-modules
:
shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl
И в завершение осталось установить этот новый модуль Perl. Какую команду
для этого использовать, вы опять узнаете из вывода make perl
.