我已经下载了草莓 PERL 并在 Winxp sp3 上使用 CGI Perl Apache 编写了一个应用程序)。我使用的库之一(由其他人编写)使用 XML::LibXML。当我加载页面时,它会给出内部服务器错误。从 Apache 错误日志我可以看到这个错误:
Can't load 'C:/strawberry/perl/site/lib/auto/XML/LibXML/LibXML.dll' for module XML::LibXML: load_file:The specified module could not可以在 C:/strawberry/perl/lib/DynaLoader.pm 第 190 行找到。 C:/strawberry/perl/site/lib/auto/XML/LibXML/LibXML.dll
具有所有权限。这个库也可以在 Linux 上正常工作。如果我删除所有需要 LibXML 的代码,我的应用程序也可以正常工作。
谁能告诉我这里什么时候可能出现问题。
4 回答
如果您查看 DynaLoader 的源代码,您会发现
许多动态扩展加载问题似乎来自这部分代码:XYZ 在 DynaLoader.pm 的第 123 行失败。通常这些错误实际上发生在扩展 XS 文件的初始化 C 代码中。Perl 将错误报告为在此 perl 代码中,因为这是它执行的最后一个 perl 代码。
您还应该得到(但可能没有注意到)以下对话框,它提供了更准确的错误消息:
问题不在于 perl 找不到 LibXML.dll;就是LibXML.dll找不到真正的libxml。(前者只是为后者提供 Perl 绑定的包装器。)要解决这个问题,您需要确保 Strawberry Perl 的c\bin
文件夹在您的 PATH 中。在你的情况下,那将是C:\strawberry\c\bin
.
您可能需要检查 windows 中的环境变量设置,确保模块的安装路径存在于 PATH 变量中。它在 linux 中工作的原因是 make 文件通常在 windows 中为你设置环境变量,它可能没有正确设置。例如;转到控制面板\系统和安全\系统单击更改设置,然后在用户变量部分中单击高级选项卡,查看是否有一个名为 perl5lib 的变量。如果不创建一个新的 perl5lib 变量并添加库的路径(通常是 C:\Perl\site\lib,但在您的情况下可能会有所不同)
我最近遇到了同样的问题,在我的情况下它与 PATH 变量无关(它已经是正确的)。问题是我正在从 Git Bash 控制台执行我的脚本,结果发现使用的是 git-bash perl 而不是 Strawberry(请参阅git-bash perl should not be first in path)。切换到标准 Windows CMD 终端有所帮助。
安装 Strawberry perl 后我遇到了同样的问题。当我从服务器运行脚本时它工作正常,但不是从自动化工具远程运行。问题是因为我们远程运行它时没有更新环境变量。所以我做了服务器重启,这解决了这个问题。