Mail Archives: cygwin/2011/01/18/13:11:31
X-Recipient: | archive-cygwin AT delorie DOT com
|
X-SWARE-Spam-Status: | No, hits=-1.5 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,TW_BJ,TW_RW,TW_WX,TW_XR,TW_YG
|
X-Spam-Check-By: | sourceware.org
|
Message-ID: | <4D35D7A7.4010808@cpan.org>
|
Date: | Tue, 18 Jan 2011 13:10:47 -0500
|
From: | Rafael Kitover <rkitover AT cpan DOT org>
|
Reply-To: | rkitover AT cpan DOT org
|
User-Agent: | Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101207 Thunderbird/3.1.7
|
MIME-Version: | 1.0
|
To: | cygwin AT cygwin DOT com
|
Subject: | Re: More Weird Perl .dll Errors
|
References: | <4D30158D DOT 8090709 AT cpan DOT org> <4D3018EF DOT 60104 AT gmx DOT de> <4D305E4B DOT 3070600 AT cpan DOT org> <AANLkTinnsbsGhiEssYRMfoF1=0SdoPq7-+820NObNXN=@mail.gmail.com> <4D320D0B DOT 601 AT cpan DOT org> <AANLkTi=bHFeT1oW+vwxdTJxzrL5DL=6Ez+SsDmEMrE96 AT mail DOT gmail DOT com>
|
In-Reply-To: | <AANLkTi=bHFeT1oW+vwxdTJxzrL5DL=6Ez+SsDmEMrE96@mail.gmail.com>
|
X-IsSubscribed: | yes
|
Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm
|
List-Id: | <cygwin.cygwin.com>
|
List-Subscribe: | <mailto:cygwin-subscribe AT cygwin DOT com>
|
List-Archive: | <http://sourceware.org/ml/cygwin/>
|
List-Post: | <mailto:cygwin AT cygwin DOT com>
|
List-Help: | <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
|
Sender: | cygwin-owner AT cygwin DOT com
|
Mail-Followup-To: | cygwin AT cygwin DOT com
|
Delivered-To: | mailing list cygwin AT cygwin DOT com
|
On 1/17/2011 2:28 PM, Reini Urban wrote:
> 2011/1/15 Rafael Kitover:
>> Hi Reini,
>>
>> I'm not having any luck:
>>
>> $ perl -MClass::XSAccessor -le 1
>> Can't load
>> '/usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/XSAccessor/XSAccessor.dll'
>> for module Class::X
>> SAccessor: No such file or directory at
>> /usr/lib/perl5/5.10/i686-cygwin/XSLoader.pm line 70.
>> at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Class/XSAccessor.pm line 11
>> Compilation failed in require.
>> BEGIN failed--compilation aborted.
>>
>> $ perlrebase
>> ...
>> ReBaseImage
>> (/usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/XSAccessor/XSAccessor.dll)
>> failed with last e
>> rror = 6
>
> bad, not loadable.
>
>> $ ls -l
>> /usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/XSAccessor/XSAccessor.dll
>> -rwxr-xrwx 1 rkitover None 500002 Jan 15 15:41
>
> The o+w perm will fail for -T taint mode, but this is not the problem here.
>
>> /usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/XSAccessor/
>> XSAccessor.dll
>>
>> $ peflags
>> /usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/XSAccessor/XSAccessor.dll
>> /usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/XSAccessor/XSAccessor.dll:
>> coff(0x2106) pe(0x8000)
>
> good
>
>> $ imagebase
>> /usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/XSAccessor/XSAccessor.dll
>> 68640000
>
> good.
>
>> $ ldd
>> /usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/XSAccessor/XSAccessor.dll
>> ntdll.dll => /cygdrive/c/Windows/SysWOW64/ntdll.dll (0x77480000)
>> kernel32.dll => /cygdrive/c/Windows/syswow64/kernel32.dll
>> (0x75530000)
>> KERNELBASE.dll => /cygdrive/c/Windows/syswow64/KERNELBASE.dll
>> (0x74d70000)
>
> bad.
> This is all?
> If so you have a mingw perl dll here, which cannot be loaded by cygwin perl.
So the question becomes, how did I get a mingw dll? I used the CPAN
shell to install this module just like any other module.
The modules that work give me correct output:
$ perl -MSub::Name -le 1
rkitover AT eeebox ~
$ ldd /usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Sub/Name/Name.dll
ntdll.dll => /cygdrive/c/Windows/SysWOW64/ntdll.dll (0x77100000)
kernel32.dll => /cygdrive/c/Windows/syswow64/kernel32.dll
(0x76670000)
KERNELBASE.dll => /cygdrive/c/Windows/syswow64/KERNELBASE.dll
(0x75690000)
cygwin1.dll => /usr/bin/cygwin1.dll (0x61000000)
ADVAPI32.DLL => /cygdrive/c/Windows/syswow64/ADVAPI32.DLL
(0x74d00000)
msvcrt.dll => /cygdrive/c/Windows/syswow64/msvcrt.dll (0x74910000)
sechost.dll => /cygdrive/c/Windows/SysWOW64/sechost.dll
(0x75370000)
RPCRT4.dll => /cygdrive/c/Windows/syswow64/RPCRT4.dll (0x74f90000)
SspiCli.dll => /cygdrive/c/Windows/syswow64/SspiCli.dll
(0x74750000)
CRYPTBASE.dll => /cygdrive/c/Windows/syswow64/CRYPTBASE.dll
(0x74740000)
cyggcc_s-1.dll => /usr/bin/cyggcc_s-1.dll (0x70e20000)
cygperl5_10.dll => /usr/bin/cygperl5_10.dll (0x57010000)
cygcrypt-0.dll => /usr/bin/cygcrypt-0.dll (0x6fb70000)
cygssp-0.dll => /usr/bin/cygssp-0.dll (0x70220000)
After 'look'ing into Class::XSAccessor:
perl Makefile.PL
make
...
$ ldd blib/arch/auto/Class/XSAccessor/XSAccessor.dll
ntdll.dll => /cygdrive/c/Windows/SysWOW64/ntdll.dll (0x77100000)
kernel32.dll => /cygdrive/c/Windows/syswow64/kernel32.dll
(0x76670000)
KERNELBASE.dll => /cygdrive/c/Windows/syswow64/KERNELBASE.dll
(0x75690000)
cygwin1.dll => /usr/bin/cygwin1.dll (0x61000000)
ADVAPI32.DLL => /cygdrive/c/Windows/syswow64/ADVAPI32.DLL
(0x74d00000)
msvcrt.dll => /cygdrive/c/Windows/syswow64/msvcrt.dll (0x74910000)
sechost.dll => /cygdrive/c/Windows/SysWOW64/sechost.dll
(0x75370000)
RPCRT4.dll => /cygdrive/c/Windows/syswow64/RPCRT4.dll (0x74f90000)
SspiCli.dll => /cygdrive/c/Windows/syswow64/SspiCli.dll
(0x74750000)
CRYPTBASE.dll => /cygdrive/c/Windows/syswow64/CRYPTBASE.dll
(0x74740000)
cyggcc_s-1.dll => /usr/bin/cyggcc_s-1.dll (0x70e20000)
cygperl5_10.dll => /usr/bin/cygperl5_10.dll (0x57010000)
cygcrypt-0.dll => /usr/bin/cygcrypt-0.dll (0x6fb70000)
cygssp-0.dll => /usr/bin/cygssp-0.dll (0x70220000)
That all looks good.
$ make test
PERL_DL_NONLAZY=1 /usr/bin/perl.exe "-MExtUtils::Command::MM" "-e"
"test_harness(0, 'blib/lib', 'blib/arch')" t
/*.t
...
...
All tests successful.
Files=23, Tests=451, 14 wallclock secs ( 0.75 usr 0.45 sys + 6.36 cusr
5.55 csys = 13.12 CPU)
Result: PASS
So that one works.
$ make install
Files found in blib/arch: installing files in blib/lib into architecture
dependent library tree
Installing
/usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/XSAccessor/XSAccessor.dll
Appending installation info to /usr/lib/perl5/5.10/i686-cygwin/perllocal.pod
$ ldd
/usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/XSAccessor/XSAccessor.dll
ntdll.dll => /cygdrive/c/Windows/SysWOW64/ntdll.dll (0x77100000)
kernel32.dll => /cygdrive/c/Windows/syswow64/kernel32.dll
(0x76670000)
KERNELBASE.dll => /cygdrive/c/Windows/syswow64/KERNELBASE.dll
(0x75690000)
What the fuck just happened there?
On the theory that EU::MM is doing something weird that breaks it, I
tried this:
$ rm -f
/usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/XSAccessor/XSAccessor.dll
$ cp blib/arch/auto/Class/XSAccessor/XSAccessor.dll
/usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/XSAcc
essor/XSAccessor.dll
$ ldd
/usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/XSAccessor/XSAccessor.dll
ntdll.dll => /cygdrive/c/Windows/SysWOW64/ntdll.dll (0x77100000)
kernel32.dll => /cygdrive/c/Windows/syswow64/kernel32.dll
(0x76670000)
KERNELBASE.dll => /cygdrive/c/Windows/syswow64/KERNELBASE.dll
(0x75690000)
How do you explain this? I just made a copy of the .dll, and that breaks it!
And it's only a copy into that specific location.
$ cp blib/arch/auto/Class/XSAccessor/XSAccessor.dll .
$ ldd ./XSAccessor.dll
ntdll.dll => /cygdrive/c/Windows/SysWOW64/ntdll.dll (0x77100000)
kernel32.dll => /cygdrive/c/Windows/syswow64/kernel32.dll
(0x76670000)
KERNELBASE.dll => /cygdrive/c/Windows/syswow64/KERNELBASE.dll
(0x75690000)
cygwin1.dll => /usr/bin/cygwin1.dll (0x61000000)
ADVAPI32.DLL => /cygdrive/c/Windows/syswow64/ADVAPI32.DLL
(0x74d00000)
msvcrt.dll => /cygdrive/c/Windows/syswow64/msvcrt.dll (0x74910000)
sechost.dll => /cygdrive/c/Windows/SysWOW64/sechost.dll
(0x75370000)
RPCRT4.dll => /cygdrive/c/Windows/syswow64/RPCRT4.dll (0x74f90000)
SspiCli.dll => /cygdrive/c/Windows/syswow64/SspiCli.dll
(0x74750000)
CRYPTBASE.dll => /cygdrive/c/Windows/syswow64/CRYPTBASE.dll
(0x74740000)
cyggcc_s-1.dll => /usr/bin/cyggcc_s-1.dll (0x70e20000)
cygperl5_10.dll => /usr/bin/cygperl5_10.dll (0x57010000)
cygcrypt-0.dll => /usr/bin/cygcrypt-0.dll (0x6fb70000)
cygssp-0.dll => /usr/bin/cygssp-0.dll (0x70220000)
>
> mine:
> $ ldd /usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/XSAccessor/XSAccessor.dll
> ntdll.dll => /cygdrive/c/Windows/SYSTEM32/ntdll.dll (0x77990000)
> kernel32.dll => /cygdrive/c/Windows/system32/kernel32.dll (0x77120000)
> KERNELBASE.dll => /cygdrive/c/Windows/system32/KERNELBASE.dll
> (0x75b90000)
> cygwin1.dll => /usr/bin/cygwin1.dll (0x61000000)
> ADVAPI32.DLL => /cygdrive/c/Windows/system32/ADVAPI32.DLL (0x76e20000)
> msvcrt.dll => /cygdrive/c/Windows/system32/msvcrt.dll (0x75de0000)
> sechost.dll => /cygdrive/c/Windows/SYSTEM32/sechost.dll (0x76190000)
> RPCRT4.dll => /cygdrive/c/Windows/system32/RPCRT4.dll (0x77020000)
> cyggcc_s-1.dll => /usr/bin/cyggcc_s-1.dll (0x67f00000)
> cygperl5_10.dll => /usr/bin/cygperl5_10.dll (0x56010000)
> cygcrypt-0.dll => /usr/bin/cygcrypt-0.dll (0x72fe0000)
> cygssp-0.dll => /usr/bin/cygssp-0.dll (0x67280000)
> SspiCli.dll => /cygdrive/c/Windows/system32/SspiCli.dll (0x759f0000)
>
>> On 1/14/2011 12:00 PM, Reini Urban wrote:
>>>
>>> 2011/1/14 Rafael Kitover:
>>>>
>>>> I tried both peflagsall and rebaseall with a -T list including all .dlls
>>>> under /usr/lib/perl5 as well as /usr/bin/cygperl5_10.dll
>>>>
>>>> But the error for MOP.dll persists.
>>>
>>> The Class::MOP and Sub::Name dll's are different beasts.
>>> If they do not load, (even windows refuses to load them apparently)
>>> you'll have to recompile them, followed by a perlrebase.
>>>
>>>> I'm not sure that when I tried the rebaseall it ran through to
>>>> completion,
>>>> because it gave me this error:
>>>>
>>>> FixImage (/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgcc_s_sjlj-1.dll)
>>>> failed with last error = 13
>>>
>>> You have to exclude all mingw dll's from rebaseall.
>>> This will be fixed in the next rebase package.
>>>
>>>> This is Windows 7 64bit
>>>>
>>>> On 1/14/2011 4:35 AM, Matthias Andree wrote:
>>>>>
>>>>> Am 14.01.2011 10:21, schrieb Rafael Kitover:
>>>>>>
>>>>>> Something weird happened to my Class::MOP .dll :
>>>>>>
>>>>>> $ perl -MClass::MOP -le 1
>>>>>> Can't load
>>>>>> '/usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/MOP/MOP.dll' for
>>>>>> module Class::MOP: No such fi
>>>>>> le or directory at /usr/lib/perl5/5.10/i686-cygwin/XSLoader.pm line 70.
>>>>>> at /usr/lib/perl5/site_perl/5.10/i686-cygwin/Class/MOP.pm line 38
>>>>>> Compilation failed in require.
>>>>>> BEGIN failed--compilation aborted.
>>>>>>
>>>>>> If I try to run perlrebase, I get this:
>>>>>>
>>>>>> ...
>>>>>> /usr/lib/perl5/5.10/i686-cygwin/auto/Time/Piece/Piece.dll: new base =
>>>>>> 57900000, new size = 10000
>>>>>> /usr/lib/perl5/5.10/i686-cygwin/auto/Unicode/Normalize/Normalize.dll:
>>>>>> new base = 57910000, new size = 50000
>>>>>> /usr/lib/perl5/5.10/i686-cygwin/auto/Win32/Win32.dll: new base =
>>>>>> 57960000, new size = 20000
>>>>>> /usr/lib/perl5/5.10/i686-cygwin/auto/Win32API/File/File.dll: new base =
>>>>>> 57980000, new size = 30000
>>>>>> ReBaseImage
>>>>>> (/usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/MOP/MOP.dll)
>>>>>> failed with last error = 6
>>>
>>> Either no write+exec permission or broken dependency.
>>>
>>>>>> I tried doing a "notest force install Class::MOP" in CPAN shell, same
>>>>>> error after the installation finishes.
>>>
>>> If it's not the perm (unlikely), check the imagebase of your new dll:
>>>
>>> $ cat ~/bin/imagebase
>>> #!/bin/sh
>>> objdump -p $1 |grep ImageBase |cut -c12-
>>>
>>> $ imagebase
>>> /usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/MOP/MOP.dll
>>> 66c00000
>>>
>>> And check the bases of the dependant dll's also: Anything below
>>> 0x4000_0000 is broken.
>>>
>>> $ ldd /usr/lib/perl5/site_perl/5.10/i686-cygwin/auto/Class/MOP/MOP.dll
>>> ntdll.dll => /cygdrive/c/Windows/SYSTEM32/ntdll.dll (0x778b0000)
>>> kernel32.dll => /cygdrive/c/Windows/system32/kernel32.dll
>>> (0x777d0000)
>>> KERNELBASE.dll => /cygdrive/c/Windows/system32/KERNELBASE.dll
>>> (0x75cb0000)
>>> cygwin1.dll => /usr/bin/cygwin1.dll (0x61000000)
>>> ADVAPI32.DLL => /cygdrive/c/Windows/system32/ADVAPI32.DLL
>>> (0x77730000)
>>> msvcrt.dll => /cygdrive/c/Windows/system32/msvcrt.dll
>>> (0x76600000)
>>> sechost.dll => /cygdrive/c/Windows/SYSTEM32/sechost.dll
>>> (0x767e0000)
>>> RPCRT4.dll => /cygdrive/c/Windows/system32/RPCRT4.dll
>>> (0x766b0000)
>>> cyggcc_s-1.dll => /usr/bin/cyggcc_s-1.dll (0x67f00000)
>>> cygperl5_10.dll => /usr/bin/cygperl5_10.dll (0x56010000)
>>> cygcrypt-0.dll => /usr/bin/cygcrypt-0.dll (0x694d0000)
>>> cygssp-0.dll => /usr/bin/cygssp-0.dll (0x67280000)
>>> SspiCli.dll => /cygdrive/c/Windows/system32/SspiCli.dll
>>> (0x75910000)
>>>
>>>>>> I tried rebooting and running perlrebase again, same error.
>>>>>
>>>>> Try rebaseall, or if you're under Vista or 7, peflagsall.
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
- Raw text -