поиск:
Полезные ссылки

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


  • PHP конференция 2005
    Подробности!

    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.

     
    © 1997-2005 PHP Club Team
    Rambler's Top100