我有一些旧的 perl 代码最近停止在 FreeBSD 机器上工作。失败的代码(以最简单的形式)如下所示:
#!/usr/local/bin/perl -w
use strict;
use DBI;
my $datasource = "DBI:mysql:dbname:hostname.domain.com";
my $user = "username";
my $pass = "password";
DBI->connect($datasource, $user, $pass);
这失败并出现以下错误:
/libexec/ld-elf.so.1: /usr/local/lib/mysql/libmysqlclient.so.15: Undefined symbol "gethostbyname_r"
如果我将数据源更改为引用“localhost”,则代码成功。
我已经从端口重新安装了 mysql-client、DBI 和 DBD-mysql;没有效果。
此服务器上的其他应用程序(PHP、命令行工具)能够通过主机名访问 mysql 数据库而不会遇到麻烦。
有关如何解决此问题的建议?
编辑添加:我注意到我的盒子有libmysqlclient.so.15
和libmysqlclient_r.so.15
。问题可能是 DBD::mysql 在应该使用 libmysqlclient_r 时尝试使用 libmysqlclient 吗?如果是这样,如何解决?