共享对象 - 如何确定是什么 Perl 模块导致了"undefined symbol: Perl_Tstack_sp_ptr?"



我试图运行一个Perl脚本,但它正在返回:

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

有没有办法确定是哪个Perl模块导致了这种情况?

IO.so是IO的二进制组件。此分发版的模块也是perl分发版的一部分(即,它们是双重生存的)。

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

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

当我在新的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

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

  • 下载Cwd的源代码,版本来自http://search.cpan.org/并重新安装

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

编辑:

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

在更改平台路径之前,我无法处理必须进行的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上,我不得不移动zimbramon文件/安装.sh-s。。。

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

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

最新更新