Re: installing Gtk-Perl on cygwin (very long, but it actually works now;)



Hallo dominix,

Am Sonntag, 11. Januar 2004 um 20:28 schriebst du:

hi everybody.
when trying to install Gtk-perl on cygwin [1.5.5] WinNT5 (XP) with
perl-5.8.2
I got errors regarding specific symbols not found, and I'm not able
to build ImlibImage and the build process stop.
I'm stuck there. Any advice, recomendation, tip, fix, (blame ?) welcome

thanks for your time and attention.

#######################################################3
cpan Gtk
...

rm -f blib/arch/auto/Gtk/Gdk/ImlibImage/ImlibImage.dll
LD_RUN_PATH="" ld2  -s -L/usr/local/lib xs/GdkImlib.o  -o
blib/arch/auto/Gtk/Gdk/ImlibImage/ImlibImage.dll
/usr/lib/perl5/5.8.2/cygwin-thread-multi-64int/CORE/libperl.dll.a -L/usr/X11
R6/lib -L/opt/gnome/lib -lgthread -lgdk_imlib -lgtk -lgdk -lgmodule -lglib -
lintl -lXext -lX11
gcc -shared -o
ImlibImage.dll -Wl,--out-implib=libImlibImage.dll.a -Wl,--export-all-symbols
 -Wl,--enable-auto-import -Wl,--stack,8388608 \
-s -L/usr/local/lib xs/GdkImlib.o
/usr/lib/perl5/5.8.2/cygwin-thread-multi-64int/CORE/libperl.dll.a -L/usr/X11
R6/lib -L/opt/gnome/lib -lgthread -lgdk_imlib -lgtk -lgdk -lgmodule -lglib -
lintl -lXext -lX11
Creating library file: libImlibImage.dll.a
xs/GdkImlib.o(.text+0x38):GdkImlib.c: undefined reference to `_newSVMiscRef'
xs/GdkImlib.o(.text+0x59):GdkImlib.c: undefined reference to `_SvMiscRef'
xs/GdkImlib.o(.text+0x301):GdkImlib.c: undefined reference to
`_pgtk_alloc_temp'
xs/GdkImlib.o(.text+0x974):GdkImlib.c: undefined reference to
`_pgtk_alloc_temp'
xs/GdkImlib.o(.text+0xfcb):GdkImlib.c: undefined reference to `_SvGdkPixmap'
xs/GdkImlib.o(.text+0x122b):GdkImlib.c: undefined reference to
`_SvGdkBitmap'
xs/GdkImlib.o(.text+0x13a3):GdkImlib.c: undefined reference to
`_pgtk_did_we_init_gtk'
xs/GdkImlib.o(.text+0x327e):GdkImlib.c: undefined reference to
`_newSVGdkPixmap'
xs/GdkImlib.o(.text+0x355d):GdkImlib.c: undefined reference to
`_newSVGdkBitmap'
xs/GdkImlib.o(.text+0x383e):GdkImlib.c: undefined reference to
`_newSVGdkPixmap'
xs/GdkImlib.o(.text+0x3b02):GdkImlib.c: undefined reference to
`_newSVGdkBitmap'
xs/GdkImlib.o(.text+0x3e06):GdkImlib.c: undefined reference to
`_UnregisterMisc'
xs/GdkImlib.o(.text+0x4063):GdkImlib.c: undefined reference to
`_UnregisterMisc'
xs/GdkImlib.o(.text+0x42b5):GdkImlib.c: undefined reference to
`_UnregisterMisc'
xs/GdkImlib.o(.text+0x6419):GdkImlib.c: undefined reference to
`_newSVGdkPixmap'
xs/GdkImlib.o(.text+0x64bc):GdkImlib.c: undefined reference to
`_newSVGdkBitmap'
xs/GdkImlib.o(.text+0x9518):GdkImlib.c: undefined reference to
`_SvGdkWindow'
xs/GdkImlib.o(.text+0x9b3d):GdkImlib.c: undefined reference to
`_SvGdkWindow'
xs/GdkImlib.o(.text+0xa184):GdkImlib.c: undefined reference to
`_SvGdkWindow'
xs/GdkImlib.o(.text+0xb1a9):GdkImlib.c: undefined reference to
`_SvGdkBitmap'
xs/GdkImlib.o(.text+0xb58d):GdkImlib.c: undefined reference to
`_SvGdkWindow'
xs/GdkImlib.o(.text+0xd417):GdkImlib.c: undefined reference to
`_newSVGdkVisual'
xs/GdkImlib.o(.text+0xd679):GdkImlib.c: undefined reference to
`_newSVGdkColormap'
xs/GdkImlib.o(.text+0xe217):GdkImlib.c: undefined reference to
`_newSVGdkPixmap'
xs/GdkImlib.o(.text+0xe2ba):GdkImlib.c: undefined reference to
`_newSVGdkBitmap'
collect2: ld returned 1 exit status
perlld: *** system() failed to execute

Ok, what I found:
http://www.occamstoothbrush.com/perl/gtk-perl-cygwin-howto.txt
from a thread on the gtk-perl list and here the story continues:
http://mail.gnome.org/archives/gtk-perl-list/2001-November/msg00061.html

I guess you have all the prerequisites installed (that is about all of
the gnome desktop (http://cygnome.sf.net/ , Berkeley DB 3.1.17,
Libexpat, and the XML::Parser & XML::Writer perl modules)?

The interesting part at the website from the first link is part 4 (I
did the same without specifying `--without-gnomeprint' because I have
it here and it works too), everytime I got an error with these
undefined refs I opened the current Makefile, appended
`-L../blib/arch/auto/Gtk -lGtk' to the OTHERLDFLAGS library list
(as suggested in the thread from the second link) run make again and
voila, it works for GdkImlib.

The same for the second module, but now I have some more undefined
references, e.g. `_gtk_type_check_object_cast'.  This is defined in
libgtk: 
$ nm libgtk.dll.a | grep _gtk_type_check_object_cast
00000000 I __imp__gtk_type_check_object_cast
00000000 T _gtk_type_check_object_cast

But the linkline is including libgtk and libGtk, hmmm I guess it is a
problem with the case insensitivity on Windows, I tried to use
check_case:strict env setting, fired up a new terminal with the new
env setting in use and hey, what do you guess, it doesn't work.  Seems
the linker doesn't care about the case:strict setting:-(

Ok, next try, make a copy from libGtk.dll.a to libGtkGtk.dll.a and
changed the Makefile to use this libGtkGtk instead of libGtk:

1. cp blib/arch/auto/Gtk/libGtk.dll.a blib/arch/auto/Gtk/libGtkGtk.dll.a
2. add to all created Makefile's `-L../blib/arch/auto/Gtk -lGtkGtk' in
   `OTHERLDFLAGS'.
3. compile all in a shell with the env setting
   CYGWIN="check_case:strict" (well add check_case:strict to your
   usual CYGWIN settings, I use now:
   CYGWIN="ntsec binmode tty nowinsymlinks check_case:strict"

And all this actually works, hurray!

Gnome:

Hmmpf, not in the Gnome directory, this module also needs
`-L../GdkImlib/blib/arch/auto/Gtk/Gdk/ImlibImage -lImlibImage' in
addition to `-L../blib/arch/auto/Gtk -lGtkGtk' in `OTHERLDFLAGS'.

Others:

The following modules are compiled the same way, by adding
`-L../blib/arch/auto/Gtk -lGtkGtk' to `OTHERLDFLAGS'.


Applet:

In the Applet directory there are include paths missing:
 `-I/opt/gnome/include/orbit-1.0 -I/opt/gnome/include/libcapplet1'
I added it at the end of the `INC = ...' line in the Makefile and it
compiles ok, well there is also missing:
`-lcapplet -lpanel_applet -lpanel_status' from the library list, add
them to EXTRALIBS & LDLOADLIBS variable defintion somewhere at the
end. Cause:
See the top source Makefile.PL: # --modversion capplet is broken

The same problem with libGnome vs. libgmnome as before with libGtk vs.
libgtk, also make a copy of the perl libGnome.dll.a to
libGnomeGnome.dll.a and add this to OTHERLDLIBS:
`-L../Gnome/blib/arch/auto/Gnome -lGnomeGnome'


GnomePrint:

Also a library missing at the linkline -lgnomeprint?  Huh, this perl
package is really strange... And this modules also needs another
module,  `-L../GdkPixbuf/blib/arch/auto/Gtk/Gdk/Pixbuf -lPixbuf'

At least there are no circular dependencies yet...


After compilation finished:

 * launch X

 * test Gtk-Perl with `make test' doesn't work for me.

I could run the samples in the samples directories though.

Applet and Gnomeprint are probably not working as expected, Gnome
works partially.



HTH,
Gerrit
-- 
=^..^=





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]