为什么perl2exe会抱怨;未解析符号:Perl_Gthr_key_ptr";?

为什么perl2exe会抱怨;未解析符号:Perl_Gthr_key_ptr";?,perl,perl2exe,Perl,Perl2exe,在Perl中,这个错误是什么意思 Unresolved symbol: Perl_Gthr_key_ptr 我在HP-UX PA-RISC机器上使用perl2exe将Perl文件转换为二进制文件时遇到此错误 /usr/lib/dld.sl: Unresolved symbol: Perl_Gthr_key_ptr (code) from /tmp/p2xtmp-9979/Cwd.sl IOT trap (core dumped) 在我看来,它就像一个非线程perl试图加载为线程perl编

在Perl中,这个错误是什么意思

 Unresolved symbol: Perl_Gthr_key_ptr
我在HP-UX PA-RISC机器上使用perl2exe将Perl文件转换为二进制文件时遇到此错误

/usr/lib/dld.sl: Unresolved symbol: Perl_Gthr_key_ptr (code)  from /tmp/p2xtmp-9979/Cwd.sl IOT trap (core dumped)

在我看来,它就像一个非线程perl试图加载为线程perl编译的模块

编辑:为了澄清,您可以编译支持线程的Perl(线程Perl)或不支持线程的Perl(非线程Perl)。如果模块是为与线程一起使用而构建的,并且由perl加载而不支持线程,则通常会产生上述错误

要检查perl中的线程支持,只需在
perl-V
的输出中搜索“thread”字符串:

perl -V | grep thread

正在加载与基本Perl安装不兼容的Perl模块。除其他情况外,这可能是由于以前安装了带有CPANshell的模块,然后使用OS包管理器升级其下的Perl。这种情况可以通过以下方式解决:

$ cpan -r

这将找到所有带有二进制组件的CPAN模块,并根据当前安装的Perl重新编译这些二进制组件。

我不明白非线程Perl运行线程Perl模块的意思让我给你一个清晰的图片。。我有Perl代码,它工作得很好,这是示例代码#/usr/bin/perl使用严格;要求5.8.0;使用数据::转储程序;使用化学武器;使用Cwd“abs_路径”#perl2exe_包括字节;我的$file;我的$dir;我的$abs_路径$file=“dynamicload”$dir=getcwd$abs\u path=abs\u path($file);打印转储程序($abs\u路径);这可以作为perl代码使用,但只有在使用PERL2EXE更改为二进制时才会显示错误。还有一个更新是ldd/usr/lib/dld.sl输出显示/usr/lib/dld.sl:调用mmap()失败-TEXT/usr/lib/dld.sl/usr/lib/dld.sl:空间不足上述示例代码在除HP-UX PA-RISC之外的所有其他平台中都是二进制代码(转换后)。即使在HP-UX中,也只有当perl文件使用外部包(如转储程序、Cwd等)时才会发生这种情况:调用mmap()失败-TEXT/usr/lib/dld.sl与此有关吗?据您所知,HP-UX PA-RISC上的perl2exe二进制文件不支持线程,而外部模块(包)需要它。通过谷歌搜索“Unresolved symbol:Perl_Gthr_key_ptr”显示其他人遇到问题后所做的操作。