perlapp with a win32 perl-gtk2 program
- From: "T.J. Ferraro" <tjtoocool phreaker net>
- To: gtk-perl-list gnome org
- Subject: perlapp with a win32 perl-gtk2 program
- Date: Tue, 19 Feb 2008 15:32:24 -0800
After much googling I see that this is an issue that has been around for
a very long time with no resolution. After a lot of messing around I
found a workaround that I figured I would share. Take the following
hello.pl program, taken from the Gtk2-Perl Study Guide.
use Gtk2 -init;
my $window = Gtk2::Window->new ('toplevel');
$window->signal_connect (delete_event => sub { Gtk2->main_quit });
my $button = Gtk2::Button->new ('Action');
$button->signal_connect (clicked => sub { print("Hello Gtk2-Perl\n"); });
$window->add ($button);
$window->show_all;
Gtk2->main;
perlapp hello.pl
hello.exe
this yields
GLib-GObject-CRITICAL **: g_object_steal_qdata: assertion `quark > 0'
failed at hello.pl line 2.
GLib-GObject-CRITICAL **: g_object_set_qdata_full: assertion `quark > 0'
failed at hello.pl line 2.
Can't locate object method "signal_connect" via package "Gtk2::Window"
at hello.pl line 3.
Of course, this script works as expected by calling "perl hello.pl", but
not as a perlapp packaged program
So, maybe there's some sort of intermediary step we can take to resolve
the issue.
Adding the --dependent option is a thought, which brings: Can't locate
Gtk2.pm
After resolving that by --add Gtk2, we get another dependency problem.
After pushing through them all we have:
perlapp hello.pl --dependent --add Gtk2 --add strict --add warnings
--add Glib --add Exporter --add constant --add warnings::register --add
vars --add overload --add Carp --add Config --add AutoLoader --add
Config_heavy.pl
We still run into the problem. However, we have another option at our
disposal. --dyndll
perlapp hello.pl --dependent --add Gtk2 --add strict --add warnings
--add Glib --add Exporter --add constant --add warnings::register --add
vars --add overload --add Carp --add Config --add AutoLoader --add
Config_heavy.pl --dyndll
Aha! It works! So...can we take away --dependent so that it's
standalone? Yep!
perlapp hello.pl --add Gtk2 --add strict --add warnings --add Glib --add
Exporter --add constant --add warnings::register --add vars --add
overload --add Carp --add Config --add AutoLoader --add Config_heavy.pl
--dyndll
Gives us a working, standalone hello world program!
So, the workaround is to systematically create a dependent executable,
run it, see what's missing, add, rinse, repeat.
Is it a pain? Yep...but it works!
Oh, of course, don't forget the dlls that also need to be shipped.
T.J. Ferraro
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]