【问题标题】:perl: symbol lookup error: /usr/local/lib/perl/5.10.1/auto/DBD/mysql/mysql.so: undefined symbol: mysql_initperl:符号查找错误:/usr/local/lib/perl/5.10.1/auto/DBD/mysql/mysql.so:未定义符号:mysql_init
【发布时间】:2014-04-07 01:53:11
【问题描述】:

我正在尝试在程序中连接 perl 和 mysql,但收到错误:perl:符号查找错误:/usr/local/lib/perl/5.10.1/auto/DBD/mysql/mysql.so:未定义符号: 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 'use DBI' 和 perl -e 'use DBD::mysql;'在终端上什么也不返回。

请帮我解决问题。

【问题讨论】:

  • 您可以运行ldd /usr/local/lib/perl/5.10.1/auto/DBD/mysql/mysql.so 并将结果发布到您的问题中吗?
  • ldd 的结果 ...:linux-gate.so.1 => (0x001f9000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 ( 0x008df000) /lib/ld-linux.so.2 (0x001cb000)
  • 这不可能,auto/DBD/mysql/mysql.so 依赖的库比你列出的要多。

标签: mysql linux perl


【解决方案1】:

好,我就砍掉这个低效的信息查询流程,大家猜猜是什么问题。

/usr/local/lib/perl/5.10.1/auto/DBD/mysql/mysql.so:未定义符号: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. 你有它,但它不在loader的搜索路径中,这可以修复,例如在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* 的目录)添加到系统的库搜索路径中。

顺便说一句,如果可能的话,您应该始终通过 Linux 发行版的包管理器安装您需要的任何软件,这样可以避免几乎所有这些烦人的依赖问题。

【讨论】:

  • 在我的系统上,linux mint 11 ldd /usr/local...command 只显示 linux-gate.so.1 => (0x00bc3000) libc.so.6 => /lib/i386- linux-gnu/libc.so.6 (0x00cb7000) /lib/ld-linux.so.2 (0x00b36000) 而不是 libmysqlclient.so.18 未找到。我该怎么办??我已经使用 xampp 安装了 mysql。
  • @user3382201 我在 Fedora 19 上测试过。这些libmysqlclient.so* 文件在你的系统上的绝对路径是什么?
  • 运行find libmysqlclient.so*后,提示没有这样的文件或目录
  • @user3382201 尝试安装libmysqlclient-dev,如果您的系统中存在该软件包;或使用您的包管理器搜索包含“libmysqlclient.so”的包并安装它。
  • apt-get install libmysqlclient-dev 说,无法找到包......我的突触 pkg mnger 也没有显示任何结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
相关资源
最近更新 更多