DynaLoader.pm执行期间出错.so文件如何与此关联或创建

时间:2014-01-03 14:43:12

标签: perl

尝试运行perl脚本时出现以下错误。

Can't load '/oatss/oatss-prod/lib/WatchDogErrs.so' for module WatchDogErrs: /oatss/oatss-prod/lib/WatchDogErrs.so: wrong ELF class: ELFCLASS32 at /usr/lib64/perl5/DynaLoader.pm line 200.

这个.so文件是如何从.pm文件创建的,问题出在哪里。

1 个答案:

答案 0 :(得分:1)

.so不是从.pm文件创建的,它是在Perl模块构建过程中从.xs文件创建的(例如make之后{ {1}})。它是一个集成到Perl中的C代码库。这些库是架构和Perl主要版本特定的。

DynaLoader.pm是将C代码加载到Perl中的两个主要模块之一(XSLoader.pm是另一个)。

在这种情况下,似乎有人使用32位Perl编译WatchDogErrs并将其安装在perl Makefile.PL中。您正尝试将其与64位Perl一起使用。那不行。您需要使用与用于编译WatchDogErrs.so的32位Perl兼容,或者使用您想要使用的Perl重新编译它(并将其安装在其他地方,或者您将破坏使用32的脚本) -bit Perl)。