【问题标题】:Why can't I build Perl modules that load Socket.so on Solaris 10?为什么我不能在 Solaris 10 上构建加载 Socket.so 的 Perl 模块?
【发布时间】:2011-04-14 16:17:33
【问题描述】:

我正在尝试构建 Convert::ASN1 模块,但在此过程中出现错误。我在 Solaris 10 上使用 Perl 5.12.0。perl Makefile.PL 运行没有问题,make 也一样,但“make test”会引发此错误:

IMO 中最关键的部分:

t/00prim.t ....... Can't load '/usr/local/lib/perl5/5.12.0/sun4-solari +s/auto/Socket
/Socket.so' for module Socket: ld.so.1: perl5.12.0: fata +l: 
relocation error: file /usr/local/lib/perl5/5.12.0/sun4-solaris/au +to/Socket/Socket.so:
 symbol inet_aton: referenced symbol not found at + /usr/local/lib/perl5/5.12.0/XSLoader.pm
 line 70.

当我尝试安装 IO::Socket 时发生同样的错误。我认为Socket核心模块一定有问题。这不是错误日志的全部,而是主要部分。

【问题讨论】:

    标签: perl makefile solaris


    【解决方案1】:

    注意:这个答案纯属猜想,因为我没有 Solaris 机器来测试它。

    看起来 Solaris 没有将 inet_aton 放入 libsocket 中,这可能是您构建 Socket 时所链接的内容。相反,您似乎需要将 -lresolv 添加到 Makefile 中的 LIBS 行(我不知道这是否在 Makefile.PL for Socket...)。

    就像我说的,这纯粹是猜想。我主要从this bug report for DBMail 中提取这个答案。不过,我希望它能让你有所收获。

    【讨论】:

    • 感谢您的回复,在互联网上搜索解决方案时我发现了这个:rt.perl.org/rt3/Public/Bug/Display.html?id=2930,它来自关于 Socket 的 perl 错误报告。该人描述了一个非常相似(如果不相同)的问题以及他在 Solaris 上解决该问题的方法。他提到像您一样将 -lresolv 添加到库行中。我将尝试他描述的整个过程,并报告我的发现。
    【解决方案2】:

    我没有安装 Perl 5.12,但我可以访问 Solaris 10,我可以确认 Solaris 的 libsocket 没有 inet_aton(它有 inet_pton)。

    但解析器库 (libresolv) 确实有 inet_aton,所以解决方法可能是添加

    -lresolv
    

    到 Makefile 的 LDFLAGS,并在 cpan 之外自己构建/安装它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-17
      • 2023-04-11
      • 2017-09-23
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多