PERL + mysql: símbolo indefinido: mysql_init

1

Eu atualizei o mysql (client + server + dev) dos rpms disponíveis no mysql.com.

rpm -i MySQL-server-5.5.14-1.linux2.6.x86_64.rpm
rpm -i MySQL-client-5.5.14-1.linux2.6.x86_64.rpm
rpm -i MySQL-devel-5.5.14-1.linux2.6.x86_64.rpm

agora, um script que costumava se conectar a outro servidor diz:

perl: symbol lookup error: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBD/mysql/mysql.so: undefined symbol: mysql_init

o script:

use DBI;

$dsn="db";
$host="my.host.ip";
$user="anonymous"; 
$password="";
# Connect to the database.
 $dbh= DBI->connect("DBI:mysql:host=$host;database=$dsn",$user, $password,{'RaiseError' => 1});

Então, eu reinstalei o DBI-1.616 e o DBD-mysql-4.019 das fontes. para o DBD-mysql, Fazer teste diz:

$ make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00base....................ok 1/6                                           
#   Failed test 'use DBD::mysql;'
#   in t/00base.t at line 21.
#     Tried to use 'DBD::mysql'.
#     Error:  Can't load '/usr/local/package/DBD-mysql-4.019/blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: /usr/local/package/DBD-mysql-4.019/blib/arch/auto/DBD/mysql/mysql.so: undefined symbol: mysql_get_server_version at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/DynaLoader.pm line 230.
#  at (eval 6) line 2
# Compilation failed in require at (eval 6) line 2.
# BEGIN failed--compilation aborted at t/00base.t line 21.
t/00base....................NOK 2FAILED--Further testing stopped: Unable to load DBD::mysql
make: *** [test_dynamic] Error 9

Como posso resolver este problema?

Obrigado!

    
por Pierre 27.07.2011 / 10:34

2 respostas

1

OK, eu tenho a solução. Tanto quanto eu entendo, a distribuição mysql que eu usei está vinculada estaticamente. Então, quando DB: mysql está instalado, ele precisa ser compilado com essas bibliotecas estáticas:

  mkdir /tmp/mysql-static
  cp /usr/lib64/mysql/*.a /tmp/mysql-static
  perl Makefile.PL --libs="-L/tmp/mysql-static -lmysqlclient"
  make
  make test
  make install
  rm -rf /tmp/mysql-static
    
por 27.07.2011 / 12:10
0

O fato de que o DBD-mysql agora não pode encontrar o símbolo mysql_get_server_version sugere que a nova biblioteca cliente MySQL que você instalou provavelmente não possui essa função específica (ou a renomeou, ou algo assim). Dado que você não fornece informações sobre o que você atualizou para, ou a partir de, é difícil investigar e dar-lhe a resposta completa entregue a você em uma placa, mas eu estaria inclinado a tentar um upgrade de DBD-mysql, no que uma alteração de API não compatível com versões anteriores pode estar envolvida, e uma versão mais recente do DBD-mysql pode lidar melhor com isso.

    
por 27.07.2011 / 11:16

Tags