perl:符号查找错误:/usr/local/lib/perl/5.10.1/auto/DBD/mysql/mysql.so:undefined symbol:mysql_init

时间:2014-03-05 06:38:32

标签: mysql linux perl

我正在尝试在程序中连接perl和mysql但收到错误:perl:符号查找错误:/usr/local/lib/perl/5.10.1/auto/DBD/mysql/mysql.so:undefined symbol: mysql_init。请指导..

我已经通过xampp安装了mysql并在终端上使用xampp(/ opt ...命令)运行它。 Mysql从终端成功运行,但我无法通过perl程序检索值。

我正在运行的Perl程序是:

#!/usr/bin/perl -w
use DBI;
$dbh = DBI->connect('dbi:mysql:first','root','shaifu')
or die "Connection Error: $DBI::errstr\n";
$sql = "select * from q";
$sth = $dbh->prepare($sql);
$sth->execute
or die "SQL Error: $DBI::errstr\n";
while (@row = $sth->fetchrow_array) {
print "@row\n";
} 

其中first是数据库,q是表。

DBI和DBD也按照perl -e安装,使用DBI'和perl -e'使用DBD :: mysql;'在终端上没有任何回报。

请帮我解决问题。

1 个答案:

答案 0 :(得分:0)

好的,我将切断这个效率低下的信息查询过程,并猜出问题所在。

  

/usr/local/lib/perl/5.10.1/auto/DBD/mysql/mysql.so:undefined symbol:mysql_init

这意味着auto/DBD/mysql/mysql.so所依赖的库之一无法找到,所以

ldd /usr/local/lib/perl/5.10.1/auto/DBD/mysql/mysql.so

将显示类似

的内容
...
libmysqlclient.so.18 => not found

这意味着加载程序无法找到libmysqlclient.so.18。这可能意味着

  1. 你没有这个库,这可以修复,例如在Fedora中,yum install community-mysql-libs;
  2. 你拥有它,但它不在加载程序的搜索路径中,这可以修复,例如在bash中export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/path/to/libmysqlclient,假设你的libmysqlclient.so位于/path/to/libmysqlclient下。
  3. 您还可以以root身份运行/sbin/ldconfig -n /path/to/libmysqlclient,将/path/to/libmysqlclient(包含您的libmysqlclient.so*的目录)添加到系统的库搜索路径中。
  4. 顺便说一下,如果有可能,你应该总是通过Linux发行版的软件包管理器安装你需要的任何软件,这可以避免几乎所有这些恼人的依赖问题。