为什么DynaLoader.pm不能为Net :: SSLeay和Crypt :: SSLeay加载SSleay.dll?

时间:2009-01-08 05:14:55

标签: perl

我有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
nmake test  -- test fails
nmake install

perl test.pl

但是我得到了一个致命的错误:

D:\perl\Net_SSLeay.pm-1.30>perl -w test.pl
1..20
Can't load 'D:/perl/site/lib/auto/Net/SSLeay/SSLeay.dll' for module Net::SSLeay: load_file:The specified module could not be found at D:/perl/lib/DynaLoader.pm line 203.
 at test.pl line 25
Compilation failed in require at test.pl line 25.
BEGIN failed--compilation aborted at test.pl line 25.

我为Crypt :: SSLeay 0.57获得了相同的结果。

4 个答案:

答案 0 :(得分:3)

Randy Kobes an answer for this on the Perl Win32 mailing list。您的PATH环境变量是否包含包含libeay32.dll或ssleay32.dll的目录?

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

祝你好运,

答案 1 :(得分:1)

我对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 ....

答案 2 :(得分:0)

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

要调试此项,请添加env var PERL_DL_DEBUG = 5,例如set PERL_DL_DEBUG=5,然后重试或使用外部工具depends.exe查看哪些dll确实缺失。

答案 3 :(得分:0)

我在重新安装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% 变量中,它将开始工作。