我有一些旧的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客户机、DBI和DBD mysql;没有效果。
此服务器上的其他应用程序(PHP,命令行工具)能够按主机名访问mysql数据库,而不会遇到任何问题。
如何解决这个问题的建议?
编辑后添加:我注意到我的框同时具有libmysqlclient.so.15libmysqlclient_r.so.15。问题可能是DBD::mysql在应该使用libmysqlclient时试图使用libmysqlclient?如果是,如何解决?

最佳答案

黑暗中的一枪:
gethostbyname\u r表示Perl使用解析程序代码的“可重入”(也称为线程/多线程)版本。好像有什么不对劲。
从端口树编译依赖项时,通常可以打开或关闭多线程性。您可以使用make config在每个端口应用程序目录中更改以前的选择。
如果您安装了二进制软件包,可能其中某个地方的版本不匹配。

10-07 14:00
查看更多