Subject: | parl a.par not finding DLL that was added with -l |
Summary:
Using 32-bit Strawberry perl 5.24.0 on Windows; PAR::Packer v1.035.
Build a.par and a.exe as follows:
pp -p -B -c -l some.dll myprog.pl
pp -o a.exe a.par
I now have two ways to run the program:
a.exe
or
parl a.par
but when I use the parl approach, the dll is loaded from C:\Strawberry rather from the unpacked PAR cache.
Is this expected? Am I missing a parameter somewhere?
Details:
I'm trying to get XML::Parser::Expat to work in a .par file for distributing a package.
Taking some hints from PerlMonks, I have installed ListDLLs.exe (https://technet.microsoft.com/en-us/sysinternals/bb896656.aspx) to help figure out where the DLL is being loaded. Turning this into a one-liner I get:
pp -p -B -c -l libexpat-1_.dll -e "use XML::Parser::Expat; print XML::Parser::Expat->VERSION, `ListDLLs.exe $$`, join($/, @INC) "
pp -o a.exe a.par
When I execute a.exe, the ListDLLs output shows that the library was loaded from the cache:
0x62200000 0x19000 ...\par-494555736572\cache-60267defee8028cf3b2a13f4019904acfa2b57f9\01f5bf5f.xs.dll
0x6f940000 0x2c000 ...\par-494555736572\cache-60267defee8028cf3b2a13f4019904acfa2b57f9\libexpat-1_.dll
However, when I try running the program via parl, the library that is in the cache isn't used:
0x62200000 0x19000 ...\par-494555736572\cache-05fd90c5e7a752b0fb90f30dbe8ed3fddef8e1e4\01f5bf5f.xs.dll
0x6f940000 0x2c000 C:\Strawberry\c\bin\libexpat-1_.dll
Investigating further, it appears that the library is included twice in the cache from a.exe, but only one for that of a.par:
cache-60267defee8028cf3b2a13f4019904acfa2b57f9\libexpat-1_.dll
cache-60267defee8028cf3b2a13f4019904acfa2b57f9\inc\shlib\MSWin32-x86-multi-thread-64int\libexpat-1_.dll
cache-05fd90c5e7a752b0fb90f30dbe8ed3fddef8e1e4\inc\shlib\MSWin32-x86-multi-thread-64int\libexpat-1_.dll
The other output from my test shows that I'm using XML::Parser::Expat v2.44, and @INC is essentially the same in both cases:
C:\Users\IEUser\AppData\Local\Temp\par-494555736572\cache-60267defee8028cf3b2a13f4019904acfa2b57f9\inc\lib
C:\Users\IEUser\AppData\Local\Temp\par-494555736572\cache-60267defee8028cf3b2a13f4019904acfa2b57f9\inc
CODE(0x1eff76c)
CODE(0x1eff964)
and
C:\Users\IEUser\AppData\Local\Temp\par-494555736572\cache-05fd90c5e7a752b0fb90f30dbe8ed3fddef8e1e4\inc\lib
C:\Users\IEUser\AppData\Local\Temp\par-494555736572\cache-05fd90c5e7a752b0fb90f30dbe8ed3fddef8e1e4\inc
CODE(0x1edb23c)
CODE(0x1edb434)