我有一些旧的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.15
和libmysqlclient_r.so.15
。问题可能是DBD::mysql在应该使用libmysqlclient时试图使用libmysqlclient?如果是,如何解决? 最佳答案
黑暗中的一枪:
gethostbyname\u r表示Perl使用解析程序代码的“可重入”(也称为线程/多线程)版本。好像有什么不对劲。
从端口树编译依赖项时,通常可以打开或关闭多线程性。您可以使用make config
在每个端口应用程序目录中更改以前的选择。
如果您安装了二进制软件包,可能其中某个地方的版本不匹配。