【问题标题】:Why can't DynaLoader.pm load SSleay.dll for Net::SSLeay and Crypt::SSLeay?为什么 DynaLoader.pm 不能为 Net::SSLeay 和 Crypt::SSLeay 加载 SSleay.dll?
【发布时间】:2010-09-30 05:09:51
【问题描述】:

我有 Perl v5.10。我正在尝试安装 Net::SSLeay 1.30 和 Crypt::SSLeay 0.57。 我已经安装了 OpenSSL 0.9.8e。

对于 Net::SSLeay 1.30,我按照以下步骤操作:

perl Makefile.PL -windows C:\openssl 制作 nmake 测试——测试失败 制作安装 perl 测试.pl

但我遇到了一个致命错误:

D:\perl\Net_SSLeay.pm-1.30>perl -w test.pl 1..20 无法为模块 Net::SSLeay: load_file 加载“D:/perl/site/lib/auto/Net/SSLeay/SSLeay.dll”:在 D:/perl/lib/DynaLoader 中找不到指定的模块。下午 203 号线。 在 test.pl 第 25 行 在 test.pl 第 25 行的 require 中编译失败。 BEGIN failed——编译在 test.pl 第 25 行中止。

对于 Crypt::SSLeay 0.57,我得到了相同的结果。

【问题讨论】:

  • 不需要多个问号。
  • 你能把make testmake install的输出给我们吗?

标签: perl


【解决方案1】:

兰迪·科比斯有an answer for this on the Perl Win32 mailing list。您的 PATH 环境变量是否包含包含 libeay32.dll 或 ssleay32.dll 的目录?

您还可以在 Google 中找到许多其他答案。在这种情况下,我会将整个错误消息推送到 Google 搜索栏中。我开始删除部分错误消息,例如特定路径,直到收到some search results。这几乎总是对我有用,因为我很少是第一个遇到问题的人。

【讨论】:

    【解决方案2】:

    我在使用 Windows Par::Packer 时遇到了类似的问题。生成的 myprogram.exe 无法使用 PERL_DL_DEBUG 加载 rurban 的提示

    Can't load 'temp\7e717f68.xs.dll' for module Crypt::SSLeay: load_file:Das angegebene Modul wurde nicht gefunden at <embedded>/DynaLoader.pm line 193.
      at <embedded>/PAR/Heavy.pm line 95.
    

    我无法找出要包含在 pp 中的 dll。在这些提示之后,我只是用十六进制编辑器查看 dll 文件并找到了这个字符串:libgcc_s_dw2-1.dll - 这是要包含的 dll进入我的“编译”exe程序:

    pp -M Crypt::SSLeay ^
       -l c:/strawberry/perl/vendor/lib/auto/Crypt/SSLeay/SSLeay.xs.dll ^
       -l c:/strawberry/c/bin/libgcc_s_dw2-1.dll ....
    

    【讨论】:

      【解决方案3】:

      我在全新安装 Strawberry Perl 5.30 时遇到了同样的问题。谷歌搜索错误只会给出一堆未回答或半回答的问题。 Rurban 使用 depends.exe 指明了正确的方向。打开 ssleay.xs.dll 并等待它完成抛出错误会显示它所依赖的 5 个主要 dll。其中 2 个是 windows 核心 dll,3 个来自 openssl 和 perl。在草莓安装中,与加密相关的 2 个 dll 位于 [perlinstallpath]\c\bin 文件夹中。将此添加到您的 windows %PATH% 变量中,它将开始工作。

      【讨论】:

      • 如果您正在回答问题,请尝试将您的内容放入段落中并使用适当的标记进行突出显示以提高可读性。
      【解决方案4】:

      共享库通常具有外部依赖项,在某些操作系统上,这些依赖项需要在加载第一个共享库时立即实现,例如您的 SSLeay.dll,它通常需要两个加密库。在 linux 上,如果找到所有库,您可以使用 ldd 检查运行时行为。

      要调试它,请添加环境变量 PERL_DL_DEBUG=5,如 set PERL_DL_DEBUG=5 并重试或使用外部工具 depends.exe 来查看究竟缺少哪些 dll。

      【讨论】:

        猜你喜欢
        • 2011-08-27
        • 1970-01-01
        • 1970-01-01
        • 2011-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多