无法为模块 XML::LibXML 加载“C:/strawberry/perl/site/lib/auto/XML/LibXML/LibXML.dll”

Posted

技术标签:

【中文标题】无法为模块 XML::LibXML 加载“C:/strawberry/perl/site/lib/auto/XML/LibXML/LibXML.dll”【英文标题】:Can't load 'C:/strawberry/perl/site/lib/auto/XML/LibXML/LibXML.dll' for module XML::LibXML 【发布时间】:2012-07-13 03:58:47 【问题描述】:

我已经下载了草莓 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 :在 C:/strawberry/perl/lib/DynaLoader.pm 第 190 行找不到指定的模块。 C:/strawberry/perl/site/lib/auto/XML/LibXML/LibXML.dll 以所有权限存在。 这个库也可以在 Linux 上正常工作。如果我删除所有需要 LibXML 的代码,我的应用程序也可以正常工作。 谁能告诉我这里什么时候可能出现问题。

【问题讨论】:

我安装了 activeperl 并使用 PPM 下载了 XML::LibXML 包。刚刚成功! 这是因为 XML::LibXML 所需的 DLL 文件包含在 PPM 中,但在 Strawberry perl(或在 unix 发行版上)使用系统的库副本。只需从适当的源安装 LibXML2。 > 只需从适当的源安装 LibXML2... LoL @ 'simply' 谢谢大卫。 @Len - 有时找到合适的来源并不是那么简单。这就是为什么我们需要这样的论坛 这就是“简单”修饰符让我发笑的原因。 【参考方案1】:

如果您查看 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

【讨论】:

这已经很老了,但它对我有用。不要忘记在环境变量中设置 PATH 后重新加载 cmd 窗口..(我花了 1500 万才明白这是问题所在) 我在通过 Intellij 运行 perl 时遇到了同样的问题。正确设置 PATH 变量后,它工作正常。谢谢@michael-carman!【参考方案2】:

您可能需要检查 windows 中的环境变量设置, 确保模块的安装路径存在于 PATH 变量中。 它在 linux 中工作的原因是 make 文件通常在 windows 中为你设置环境变量,它可能没有正确设置。 例如; 转到控制面板\系统和安全\系统单击更改设置,然后在用户变量部分中单击高级选项卡,查看是否有一个名为 perl5lib 的变量。 如果不创建一个新的 perl5lib 变量并添加库的路径(通常是 C:\Perl\site\lib,但在您的情况下可能会有所不同)

【讨论】:

【参考方案3】:

安装 Strawberry perl 后我遇到了同样的问题。当我从服务器运行脚本时它工作正常,但不是从自动化工具远程运行。问题是因为我们远程运行它时没有更新环境变量。所以我做了服务器重启,解决了这个问题。

【讨论】:

【参考方案4】:

我最近遇到了同样的问题,在我的情况下,它与 PATH 变量无关(它已经正确)。问题是我正在从 Git Bash 控制台执行我的脚本,结果发现使用的是 git-bash perl 而不是 Strawberry(请参阅git-bash perl should not be first in path)。切换到标准 Windows CMD 终端有所帮助。

【讨论】:

以上是关于无法为模块 XML::LibXML 加载“C:/strawberry/perl/site/lib/auto/XML/LibXML/LibXML.dll”的主要内容,如果未能解决你的问题,请参考以下文章

在 @INC 中找不到 XML/LibXML.pm

使用 XML::LibXML 遍历节点

为啥即使我禁用 XML::LibXML 仍会出现打印错误?

XML::LibXML :在 perl 中提取 xml 标记的子项和孙项

为啥 XML::Simple 不受欢迎?

无法将反应模块加载为节点模块