Hi there, To pack my Gtk2 applications, I set up the following on my Windows box:
- pp -B --lib c:\strawberry\perl\vendor\lib -l "C:\strawberry\perl\site\lib\auto\Cairo\Cairo.dll" -l "C:\strawberry\perl\site\lib\auto\Pango\Pango.dll" -l "C:\strawberry\perl\site\lib\auto\Glib\Glib.dll" -l "C:\strawberry\perl\site\lib\auto\Gtk2\Gtk2.dll" -o foo.par foo.pl - unzip the par files - removed the lib/auto/Gtk2, lib/auto/Cairo lib/auto/Pango from the par unzipped directory - zipped all the directory tree back into foo.par - pp -o foo.exe foo.par I usually run this using a batch file and it works at the end. François > -----Original Message----- > From: Zakariyya Mughal [mailto:zaki.mug...@gmail.com] > Sent: lundi, 13. juin 2016 23:32 > To: Roderich Schupp > Cc: par@perl.org > Subject: Re: Getting Gtk3 to work with PAR > > On 2016-06-13 at 23:09:06 +0200, Roderich Schupp wrote: > > On Mon, Jun 13, 2016 at 9:54 PM, Zakariyya Mughal > > <zaki.mug...@gmail.com> > > wrote: > > > > > I notice that there is a similar issue > > > <https://rt.cpan.org/Public/Bug/Display.html?id=55390> that was > > > opened in 2010 for a Gtk2 program. > > > > > > > > More relevant might be the thread on the par mailing list starting at > > http://www.mail-archive.com/par%40perl.org/msg05011.html > > > > > > > But when I run the test.exe, I get the following output: > > > > > > $ ./test.exe > > > Can't load > > > 'C:\msys64\tmp\par-7a616b69\cache- > b75d584224b1a1061779c0bb91d380c83ae4a68e\79d2d23b.dll' > > > for module Cairo::GObject: load_file:The specified module could not > > > be found at C:/msys64/mingw64/lib/perl5/core_perl/DynaLoader.pm > line 193. > > > at C:/msys64/mingw64/lib/perl5/site_perl/PAR/Heavy.pm line > 120. > > > Compilation failed in require at Gtk3.pm line 47. > > > > > > > Please run > > > > objdump -ax > > C:\msys64\tmp\par-7a616b69\cache- > b75d584224b1a1061779c0bb91d380c83ae4a > > 68e\79d2d23b.dll > > | grep "DLL Name" > > > > and post its output. > > $ objdump.exe -ax "C:\msys64\tmp\par-7a616b69\cache- > b75d584224b1a1061779c0bb91d380c83ae4a68e\79d2d23b.dll" | grep "DLL > Name" > DLL Name: KERNEL32.dll > DLL Name: msvcrt.dll > DLL Name: libcairo-gobject-2.dll > DLL Name: libcairo-2.dll > DLL Name: libglib-2.0-0.dll > DLL Name: perl522.dll > DLL Name: Cairo.dll > DLL Name: Glib.dll > > I see that the same problem from the mailing list thread is still > present where the DLL references other DLLs that may have already been > loaded. > > Just as extra information, the debug output of Dynaloader is as > follows: > > $ export PERL_DL_DEBUG=1; ./test.exe > DynaLoader.pm loaded (CODE(0x6c2728) ., > C:\msys64\mingw64\lib\perl5\core_perl C:\msys64\tmp\par-7a616b69\cache- > b75d584224b1a1061779c0bb91d380c83ae4a68e) > dl_findfile() > dl_findfile found: > DynaLoader::bootstrap for IO (auto/IO/IO.dll) > DynaLoader::bootstrap for Fcntl (auto/Fcntl/Fcntl.dll) > DynaLoader::bootstrap for Cwd (auto/Cwd/Cwd.dll) > DynaLoader::bootstrap for Compress::Raw::Zlib > (auto/Compress/Raw/Zlib/Zlib.dll) > DynaLoader::bootstrap for List::Util (auto/List/Util/Util.dll) > DynaLoader::bootstrap for Encode (auto/Encode/Encode.dll) > DynaLoader::bootstrap for Data::Dumper > (auto/Data/Dumper/Dumper.dll) > DynaLoader::bootstrap for Win32 (auto/Win32/Win32.dll) > DynaLoader::bootstrap for File::Glob (auto/File/Glob/Glob.dll) > DynaLoader::bootstrap for PerlIO::scalar > (auto/PerlIO/scalar/scalar.dll) > DynaLoader::bootstrap for Tie::Hash::NamedCapture > (auto/Tie/Hash/NamedCapture/NamedCapture.dll) > DynaLoader::bootstrap for attributes > (auto/attributes/attributes.dll) > DynaLoader::bootstrap for Cairo (auto/Cairo/Cairo.dll) > DynaLoader::bootstrap for Glib (auto/Glib/Glib.dll) > DynaLoader::bootstrap for Cairo::GObject > (auto/Cairo/GObject/GObject.dll) > Can't load 'C:\msys64\tmp\par-7a616b69\cache- > b75d584224b1a1061779c0bb91d380c83ae4a68e\79d2d23b.dll' for module > Cairo::GObject: load_file:The specified module could not be found at > C:/msys64/mingw64/lib/perl5/core_perl/DynaLoader.pm line 193. > # ---snip --- > > If the problem is that a DLL is being loaded twice (with a different > name), then why not keep a package variable to cache this and skip the > step if it has already been loaded? > > Regards, > - Zaki Mughal > > > > > Cheers, Roderich