如何确定Perl模块导致的“未定义符号:Perl_Tstack_sp_ptr?”

时间:2011-06-06 18:51:22

标签: perl shared-objects

我正在尝试运行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模块导致了什么?

4 个答案:

答案 0 :(得分:14)

IO.soIO的二进制组件。这种分布的模块也是perl分布的一部分(即它们是双重生命的)。

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

/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模块并重新安装。

答案 3 :(得分:-1)

编辑:

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

我无法处理在更改平台路径之前必须执行的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

然后我再次运行install.sh而没有-s