PERL + mysql:undefined symbol:mysql_init

我已经从mysql.com上的rpms更新了mysql(client + server + dev)。

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 

现在,用于连接到另一台服务器的脚本说:

 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 

剧本:

 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}); 

所以,我已经从源代码中重新安装了DBI-1.616和DBD-mysql-4.019。 对于DBD-mysql, make test说:

 $ 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 

我该如何解决这个问题?

谢谢 !

好的,我有解决scheme。 据我所知,我使用的MySQL分配是静态链接。 所以当DB:mysql被安装时,需要使用这些静态库进行编译:

  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 

DBD-mysql现在找不到符号mysql_get_server_version的事实表明,您安装的较新的MySQL客户端库可能缺less特定的function(或者已经重命名了它)。 鉴于你没有提供你升级到的信息,或者很难调查并给你完整的答案给你,但我倾向于尝试DBD-mysql升级,可能涉及非向后兼容的API更改,而更新的DBD-mysql版本可能会更好地处理它。