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: pnewk...@cdrg.org, y...@pereslavl.ru
      Status: open
 Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=67311 >


On 2011-04-26 10:56:10, y...@pereslavl.ru 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

Reply via email to