【问题标题】:How can you determine what Perl module is causing "undefined symbol: Perl_Tstack_sp_ptr?"如何确定是什么 Perl 模块导致“未定义符号:Perl_Tstack_sp_ptr?”
【发布时间】:2011-09-09 13:00:36
【问题描述】:

我正在尝试运行 Perl 脚本,但它正在返回:

/usr/bin/perl:符号查找错误: /usr/local/groundwork/perl/lib/5.8.8/x86_64-linux-thread-multi/auto/IO/IO.so: 未定义符号:Perl_Tstack_sp_ptr

有什么方法可以确定是什么 Perl 模块导致了这种情况?

【问题讨论】:

    标签: perl shared-objects


    【解决方案1】:

    IO.soIO 的二进制组件。此发行版的模块也是 perl 发行版的一部分(即它们是双活的)。

    当使用使用一个版本的 Perl 编译的二进制文件被不同版本的 Perl 使用时,通常会发生这种类型的错误。

    【讨论】:

    • 谢谢。这确实是问题所在。脚本顶部的 shebang 指向了错误的 perl。
    • 也可能反过来:旧版本的二进制文件被更新版本的 Perl 使用。例如,手动将一些二进制文件从 CentOS 6 复制到 CentOS 7(使用更高版本的 Perl)。
    • 已修复。 . . . .
    【解决方案2】:

    我最近在登录文件中定义了PERL5LIB 环境变量时遇到了这个问题,但它们指向的目录与系统安装的 perl 不兼容。发生这种情况是因为HOME 文件系统交叉安装在许多不同的机器上,其中 perl 安装是异构的。删除环境变量即可解决问题,我会找到更好的方法来管理本地库。

    【讨论】:

      【解决方案3】:

      当我在新的 CentOS(例如 CentOS 6.4)上使用旧的 perl 模块时,我多次遇到类似的问题。

      /usr/bin/perl: symbol lookup error: /home/sonnn/perl5/lib/perl5/x86_64-linux-thread-multi/auto/Cwd/Cwd.so: undefined symbol: Perl_Tstack_sp_ptr
      
      /usr/bin/perl: symbol lookup error: /home/sonnn/perl5/lib/perl5/x86_64-linux-thread-multi/auto/version/vxs/vxs.so: undefined symbol: Perl_Tstack_sp_ptr
      

      我已通过以下方式解决了这些问题:

      • http://search.cpan.org/下载Cwd的源码并重新安装

          # tar -xzf version-0.9906.tar.gz
          # cd version-0.9906
          # perl Makefile.PL INSTALL_BASE=/home/sonnn/perl5/
          # make
          # make install
        
          (If you use default module path, you can omit "INSTALL_BASE=/home/sonnn/perl5/")
        
      • 对其他模块执行类似操作

      在你的情况下,我认为你可以从http://search.cpan.org/ 下载 IO 模块并重新安装它。

      【讨论】:

      • 我刚刚遇到了与您发布的完全相同的“vxs”错误。另一种方法是使用:“cpanm version”和“cpanm DBI”(DBI 是遇到问题的模块)。我认为这比手动安装模块更容易。
      【解决方案4】:

      编辑:

      最后,即使我知道它没有回答问题,我还是允许自己,因为它看起来很难获得信息,因为我发现很多网站都提到了这些错误,但很少有网站提供一致的解决方案。就是这样。

      我无法处理在更改平台路径之前必须执行的 zimbra 迁移。我们从 Ubuntu 8.04 和 Zimbra 6.0.16 到 Zimbra 7.2.7,迁移到 Ubuntu 10.04,然后升级 Zimbra 8.0.9,然后迁移到 Centos 7,然后升级到 8.6.0

      在 Centos 上,我必须在执行 ./install.sh -s ... 之后移动 zimbramon 文件...

      mv /opt/zimbra/zimbramon/lib/x86_64-linux-gnu-thread-multi/ /opt/zimbra/zimbramon/lib/x86_64-linux-gnu-thread-multi.bak

      然后我在没有 -s 的情况下再次运行 install.sh

      【讨论】:

        猜你喜欢
        • 2012-05-13
        • 1970-01-01
        • 1970-01-01
        • 2021-04-05
        • 2017-05-01
        • 2021-07-23
        • 1970-01-01
        • 2016-07-18
        • 2014-06-16
        相关资源
        最近更新 更多