MySQL- Руководство разработчика

Проблемы с интерфейсом 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'

    Добавьте -L/usr/lib/gcc-lib/... -lgcc к команде компоновки, когда библиотека mysql.so собрана (проверьте вывод из 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 и затем продолжить установку с самого начала.


    Если Вы хотите использовать Perl- модуль на системе, которая не поддерживает динамическую связь (подобно SCO), Вы можете сгенерировать статическую версию Perl, которая включает DBI и DBD-mysql. Соберите версию Perl с модулем DBI и установите поверх текущей версии Perl. Затем Вы используете это, чтобы сформировать версию Perl, которая дополнительно имеет встроенный код DBD, и вот ее-то и надо установить как окончательную.

    На 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, которую Вы должны выполнить, чтобы осуществить установку. На 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 указывает команду, которую Вам надлежит использовать для выполнения установки.

                  


    Содержание раздела