Discussion:
[rt.cpan.org #102690] Error with packing Check.xs.dll
(too old to reply)
Roderich Schupp via RT
2015-03-11 14:08:19 UTC
Permalink
Wed Mar 11 10:08:08 2015: Request 102690 was acted upon.
Transaction: Correspondence added by RSCHUPP
Queue: PAR-Packer
Subject: Error with packing Check.xs.dll
Broken in: (no value)
Severity: (no value)
Owner: Nobody
Requestors: ***@cpan.org
Status: new
Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=102690 >
Can't load 'D:\tmp\par-7a646d\cache-1426079581\b61437bc.xs.dll' for
module multidimensional: load_file:The specified module could not be
found at d:/devel/p
erl/perl/lib/DynaLoader.pm line 193.
at d:/devel/perl/perl/site/lib/PAR/Heavy.pm line 120.
Compilation failed in require at script/1.pl line 5.
BEGIN failed--compilation aborted at script/1.pl line 5.
b61437bc.xs.dll is the alias for auto/B/Hooks/OP/Check/Check.xs.dll
How did you determine this?
But in PAR this is completely different file, than original. I don't
know why, maybe you compress dlls or do something else, but this
didn't work with this dll.
The only thing PAR::Packer does with DLLs (and most other files):
- it stores them into a zip file (using Archive::Zip)
- at runtime it extracts them under the mangled name, actually it uses
the zip's crc32 checksum of the file as the mangled basename

Extract auto/B/Hooks/OP/Check/Check.xs.dll from your exe manually,

unzip 1.exe

and compare with the above cache file. If there different, it's
an Archive::Zip problem. If there identical, my guess is that it's
Check.xs.dll compiled for a different Perl version (do you have
several Perl versions installed on your machine?). BTW, have you
checked that 1.pl works in unpacked form?

Cheers, Roderich
via RT
2015-03-11 14:28:52 UTC
Permalink
Wed Mar 11 10:28:51 2015: Request 102690 was acted upon.
Transaction: Correspondence added by ***@gmail.com
Queue: PAR-Packer
Subject: Re: [rt.cpan.org #102690] Error with packing Check.xs.dll
Broken in: (no value)
Severity: (no value)
Owner: Nobody
Requestors: ***@cpan.org
Status: open
Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=102690 >
Post by Roderich Schupp via RT
<URL: https://rt.cpan.org/Ticket/Display.html?id=102690 >
Can't load 'D:\tmp\par-7a646d\cache-1426079581\b61437bc.xs.dll' for
module multidimensional: load_file:The specified module could not be
found at d:/devel/p
erl/perl/lib/DynaLoader.pm line 193.
at d:/devel/perl/perl/site/lib/PAR/Heavy.pm line 120.
Compilation failed in require at script/1.pl line 5.
BEGIN failed--compilation aborted at script/1.pl line 5.
b61437bc.xs.dll is the alias for auto/B/Hooks/OP/Check/Check.xs.dll
How did you determine this?
But in PAR this is completely different file, than original. I don't
know why, maybe you compress dlls or do something else, but this
didn't work with this dll.
- it stores them into a zip file (using Archive::Zip)
- at runtime it extracts them under the mangled name, actually it uses
the zip's crc32 checksum of the file as the mangled basename
Extract auto/B/Hooks/OP/Check/Check.xs.dll from your exe manually,
unzip 1.exe
and compare with the above cache file. If there different, it's
an Archive::Zip problem. If there identical, my guess is that it's
Check.xs.dll compiled for a different Perl version (do you have
several Perl versions installed on your machine?). BTW, have you
checked that 1.pl works in unpacked form?
I have only single perl version installed.

auto/B/Hooks/OP/Check/Check.xs.dll in PAR and in perl are identical.

Additionally to error in console I get windows system error message:
"The program can't start because Check.xs.dll is missing from your
computer."

Also, if I manually copy Check.xs.dll to the directory with 1.exe - all
works.

1.pl works without errors.
Post by Roderich Schupp via RT
Cheers, Roderich
Roderich Schupp via RT
2015-03-11 16:04:14 UTC
Permalink
Wed Mar 11 12:04:13 2015: Request 102690 was acted upon.
Transaction: Correspondence added by RSCHUPP
Queue: PAR-Packer
Subject: Error with packing Check.xs.dll
Broken in: (no value)
Severity: (no value)
Owner: Nobody
Requestors: ***@cpan.org
Status: open
Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=102690 >
Post by via RT
"The program can't start because Check.xs.dll is missing from your
computer."
Hm, how can Windows know the name Check.xs.dll if PAR tries
(unsuccessfully) to load it using its mangled name...

Uh-oh, found it: multidimensional.xs.dll _directly_ links against Check-xs.dll! That's rogue behaviour. Only a handfull of modules do something like this and the all have problems with PAR::Packer (known offenders: Windows versions of Glib/Gtk+ and WxWidgets).

Try the following workaround: explicitly add Check.xs.dll
using "pp --link ...". This will pack 2 copies of it -
one under the usual .../auto/... hierarchy and another directly under
/shlib (or similar). The former will be extracted on demand using the
mangled name, but the latter will always be extracted to cache-dir/shlib
using the original name. Moreover the PATH for the execution of the
packed exe will contain cache-dir/shlib, hence Windows will be able
to locate the latter copy.

Cheers, Roderich
Roderich Schupp via RT
2015-03-11 16:08:22 UTC
Permalink
Wed Mar 11 12:08:17 2015: Request 102690 was acted upon.
Transaction: Correspondence added by RSCHUPP
Queue: PAR-Packer
Subject: Error with packing Check.xs.dll
Broken in: (no value)
Severity: (no value)
Owner: Nobody
Requestors: ***@cpan.org
Status: open
Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=102690 >
Uh-oh, found it: multidimensional.xs.dll _directly_ links against Check.xs.dll!
Just for the record, one way to find the DLLs that foo.dll links against is

objdump -ax foo.dl

and look (or grep) for lines matching "DLL Name:".

Cheers, Roderich
via RT
2015-03-11 16:08:49 UTC
Permalink
Wed Mar 11 12:08:48 2015: Request 102690 was acted upon.
Transaction: Correspondence added by ***@gmail.com
Queue: PAR-Packer
Subject: Re: [rt.cpan.org #102690] Error with packing Check.xs.dll
Broken in: (no value)
Severity: (no value)
Owner: Nobody
Requestors: ***@cpan.org
Status: open
Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=102690 >


Thanks.
Will do.
Post by Roderich Schupp via RT
<URL: https://rt.cpan.org/Ticket/Display.html?id=102690 >
Post by via RT
"The program can't start because Check.xs.dll is missing from your
computer."
Hm, how can Windows know the name Check.xs.dll if PAR tries
(unsuccessfully) to load it using its mangled name...
Uh-oh, found it: multidimensional.xs.dll _directly_ links against Check-xs.dll! That's rogue behaviour. Only a handfull of modules do something like this and the all have problems with PAR::Packer (known offenders: Windows versions of Glib/Gtk+ and WxWidgets).
Try the following workaround: explicitly add Check.xs.dll
using "pp --link ...". This will pack 2 copies of it -
one under the usual .../auto/... hierarchy and another directly under
/shlib (or similar). The former will be extracted on demand using the
mangled name, but the latter will always be extracted to cache-dir/shlib
using the original name. Moreover the PATH for the execution of the
packed exe will contain cache-dir/shlib, hence Windows will be able
to locate the latter copy.
Cheers, Roderich
Loading...