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