在编译为二进制文件时在perl 5.28上进行perlcc编译时出错

时间:2019-02-03 18:03:53

标签: perl

我使用以下选项在自定义路径(/usr/local/perl528)中从Source编译了Perl 5.28:

config_args='-des -Dprefix=/usr/local/perl528'

然后在perl528中编译B:CC,并使用以下代码创建一个hello.pl

#!/usr/local/perl528/bin/perl

use Socket;

print "Hello world";

下一步:

/usr/local/perl528/perlcc -o hello hello.pl

./ hello执行后,我得到以下代码:

panic: corrupt saved stack index -1414812757 at (eval 12) line 26.
panic: corrupt saved stack index -1414812757 at (eval 12) line 26.
panic: corrupt saved stack index -1414812757 at (eval 12) line 26.
panic: corrupt saved stack index -1414812757 at (eval 12) line 26.
panic: corrupt saved stack index -1414812757 at (eval 12) line 26.
panic: corrupt saved stack index -1414812757 at (eval 12) line 26.
panic: corrupt saved stack index -1414812757 at (eval 12) line 26.
panic: corrupt saved stack index -1414812757 at (eval 12) line 26.
panic: corrupt saved stack index -1414812757 at (eval 12) line 26.
panic: corrupt saved stack index -1414812757 at (eval 12) line 26.
panic: corrupt saved stack index -1414812757 at (eval 12) line 26.

./ hello的踪迹:

27738 stat("/usr/local/perl528/lib/5.28.1/x86_64-linux/Socket.pm/auto//.so", 0x9ce0a0) = -1 ENOTDIR (Not a directory)

为什么会出现此错误?

更新:

  • 问题仅在使用模块时发生。

  • use strict;很好,不会引起任何错误,但其他人会的。

  • 代码和错误是真实的。 (是的,在线错误 26而我只有6行代码。

谢谢。

1 个答案:

答案 0 :(得分:5)

perlcc工具是一个相当小众的实用程序,不再是核心Perl的一部分。对于与Perl内部结构紧密结合的第三方工具,在使用最新的Perl版本时,您可能会发现一些破损。

查看perlcc Changes文档在这里有帮助:

  • 版本1.55(最新的稳定版本)仅增加了对perl 5.24的支持
  • 开发版本1.55_08提到了perl 5.27.3,这是perl 5.28的开发版本
  • perl-compiler GitHub项目提到在5.28上进行测试

因此:

  • 考虑安装perlcc的开发版本,
  • 甚至直接从GitHub安装。
  • 或考虑使用较旧的Perl版本。
  • 或考虑使用cperl,这是perlcc维护者Reini Urban的perl分支。 (当然,使用叉子可能会破坏其他东西……)