web-dev-qa-db-ja.com

PERL + mysql:未定義のシンボル:mysql_init

Mysql.comで利用可能なrpmから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
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

この問題を解決するにはどうすればよいですか?

ありがとう!

1
Pierre

OK、解決策があります。私が理解している限り、私が使用した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
1
Pierre

DBD-mysqlがシンボルmysql_get_server_versionを見つけられなくなったという事実は、インストールした新しいMySQLクライアントライブラリにその特定の関数がない(または名前が変更されているなど)ことを示しています。何にアップグレードしたか、何からアップグレードしたかについての情報を提供していないことを考えると、調査して完全な回答をプレートで提供することは困難ですが、DBD-mysqlのアップグレードを試してみたいと思います。下位互換性のないAPIの変更が含まれる可能性があり、新しいDBD-mysqlバージョンがそれをより適切に処理する可能性があることに基づいています。

0
womble