Wed Apr 27 04:22:40 2011: Request 67311 was acted upon.
Transaction: Correspondence added by RSCHUPP
Queue: PAR-Packer
Subject: missing dll
Broken in: 1.009
Severity: Important
Owner: RSCHUPP
Requestors: [email protected], [email protected]
Status: open
Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=67311 >
On 2011-04-26 10:56:10, [email protected] wrote:
> I use pp to create exe from perl about two years.
> I never had C compiler in the PATH and never had problems.
> There always was a warning (You don't have a C compiler on your PATH)
> but an exe-file was successfully created and executed on my computer
> and on computers without any perl or C.
FYI: In general, you need (and always needed) a C compiler
to build PAR::Packer. But failing that "perl Makefile.PL" tries
to find a pre-built PAR::Packer on CPAN that matches your installation.
In the past you just got lucky that it found one.
> RSvR> - please post the output of
> RSvR> objdump -ax myldr\boot.exe | find "DLL"
>
> DLL Name: ADVAPI32.DLL
> DLL Name: KERNEL32.dll
> DLL Name: msvcrt.dll
> DLL Name: msvcrt.dll
> DLL Name: libgcc_s_dw2-1.dll
The last line explains what your seeing: boot.exe is linked against
libgcc_s_dw2-1.dll and hence needs it to be present in PATH
to run. Same goes for all pp'ed executables because they basically
consist of boot.exe concatenated with a PAR file.
AFAICT there is no need to link boot.exe against libgcc_*.dll.
Looking at your build log, the most likely suspect is this line:
C:\MinGW\bin\g++.exe boot.o ... -o boot.exe
i.e. using g++ as linker (instead of gcc). That will probably include
support for exception handling which pulls in libgcc.
Now "C:\MinGW\bin\g++.exe" is just Config{ld} from your Config.pm.
Hmm... I understand why ActiveState wants to link "as C++" and that's
correct for linking par.exe (which is a special-purpose Perl
interpreter), but unfortunately not for boot.exe (which is a standalone
executable that has nothing to do with Perl).
Please try the patch below (on top of the previous patch)
and check if it makes the reference to libgcc*.dll in boot.exe
go away.
--- myldr/Makefile.PL.orig 2011-04-26 08:40:32.000000000 +0200
+++ myldr/Makefile.PL 2011-04-27 10:16:26.000000000 +0200
@@ -320,7 +324,7 @@
boot$o: \$(MKTMP_STUFF) $my_stuff
$boot_exe: boot$o
- \$(LD) boot$o \$(STATIC_LDFLAGS) $res $out$boot_exe_link
+ \$(CC) boot$o \$(STATIC_LDFLAGS) $res $out$boot_exe_link
$mt_cmd
\$(PERLRUN) parlsig.pl $boot_exe $par_exe $dynperl $chunk_size
Cheers, Roderich