Re: How to create a self contained GTK+ Application for Linux



On 5/22/07, Jeremy Roberson <jroberson interwritelearning com> wrote:
The majority of our clients are using custom Linux Distributions and they are
using older versions of GTK+.  Our application depends on features available in
GTK+ >= 2.10 so, I need to figure out how to distribute the application with all
of its dependencies.

So, I used ldd to determine all of the dependencies.  The output is listed below.

->ldd interwrite-learning-systray
        linux-gate.so.1 =>  (0xffffe000)
        libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0xb7c49000)
        libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0xb7bc3000)
        libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0xb7ba7000)
        libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0xb7b90000)
        libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7b69000)
        libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0xb7b61000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb7b36000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0xb7b28000)
        libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb7b1f000)
        libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0xb7b1c000)
        libXi.so.6 => /usr/lib/libXi.so.6 (0xb7b14000)
        libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0xb7b0e000)
        libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0xb7b05000)
        libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0xb7b00000)
        libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0xb7ac1000)
        libcairo.so.2 => /usr/lib/libcairo.so.2 (0xb7a51000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0xb7960000)
        libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0xb7926000)
        libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0xb7923000)
        libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb791f000)
        libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0xb7919000)
        librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7910000)
        libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb787b000)
        libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7864000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7723000)
        /lib/ld-linux.so.2 (0xb7fb1000)
        libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0xb76f7000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb768c000)
        libz.so.1 => /usr/lib/libz.so.1 (0xb7678000)
        libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb7658000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0xb7655000)
        libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb7631000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb762c000)

So, I copied all of the shared libraries into a sub directory of the application
directory called "lib/" for testing.  I then used the following commands.

->export LD_LIBRARY_PATH=../lib
->./interwrite-learning-systray

Everything runs okay on my system with GTK+ 2.10
I then ran ldd again to see if my application was linked against the libraries
that I'm providing in the application directory and sure enough, it is.  The
output is below.

->ldd interwrite-learning-systray
        linux-gate.so.1 =>  (0xffffe000)
        libgtk-x11-2.0.so.0 => ../lib/libgtk-x11-2.0.so.0 (0xb7c0d000)
        libgdk-x11-2.0.so.0 => ../lib/libgdk-x11-2.0.so.0 (0xb7b87000)
        libatk-1.0.so.0 => ../lib/libatk-1.0.so.0 (0xb7b6b000)
        libgdk_pixbuf-2.0.so.0 => ../lib/libgdk_pixbuf-2.0.so.0 (0xb7b54000)
        libm.so.6 => ../lib/libm.so.6 (0xb7b2d000)
        libpangocairo-1.0.so.0 => ../lib/libpangocairo-1.0.so.0 (0xb7b25000)
        libfontconfig.so.1 => ../lib/libfontconfig.so.1 (0xb7afa000)
        libXext.so.6 => ../lib/libXext.so.6 (0xb7aeb000)
        libXrender.so.1 => ../lib/libXrender.so.1 (0xb7ae3000)
        libXinerama.so.1 => ../lib/libXinerama.so.1 (0xb7ae0000)
        libXi.so.6 => ../lib/libXi.so.6 (0xb7ad8000)
        libXrandr.so.2 => ../lib/libXrandr.so.2 (0xb7ad2000)
        libXcursor.so.1 => ../lib/libXcursor.so.1 (0xb7ac8000)
        libXfixes.so.3 => ../lib/libXfixes.so.3 (0xb7ac3000)
        libpango-1.0.so.0 => ../lib/libpango-1.0.so.0 (0xb7a85000)
        libcairo.so.2 => ../lib/libcairo.so.2 (0xb7a15000)
        libX11.so.6 => ../lib/libX11.so.6 (0xb7924000)
        libgobject-2.0.so.0 => ../lib/libgobject-2.0.so.0 (0xb78e9000)
        libgmodule-2.0.so.0 => ../lib/libgmodule-2.0.so.0 (0xb78e6000)
        libdl.so.2 => ../lib/libdl.so.2 (0xb78e2000)
        libgthread-2.0.so.0 => ../lib/libgthread-2.0.so.0 (0xb78dd000)
        librt.so.1 => ../lib/librt.so.1 (0xb78d4000)
        libglib-2.0.so.0 => ../lib/libglib-2.0.so.0 (0xb783e000)
        libpthread.so.0 => ../lib/libpthread.so.0 (0xb7827000)
        libc.so.6 => ../lib/libc.so.6 (0xb76e6000)
        /lib/ld-linux.so.2 (0xb7f67000)
        libpangoft2-1.0.so.0 => ../lib/libpangoft2-1.0.so.0 (0xb76bb000)
        libfreetype.so.6 => ../lib/libfreetype.so.6 (0xb764f000)
        libz.so.1 => ../lib/libz.so.1 (0xb763b000)
        libexpat.so.1 => ../lib/libexpat.so.1 (0xb761b000)
        libXau.so.6 => ../lib/libXau.so.6 (0xb7618000)
        libpng12.so.0 => ../lib/libpng12.so.0 (0xb75f4000)
        libXdmcp.so.6 => ../lib/libXdmcp.so.6 (0xb75ef000)

So, according the ldd output above, it should work. So, I copied the application
over to a test system using an older version of GTK+ and executed the following
commands.

->export LD_LIBRARY_PATH=../lib
->./interwrite-learning-systray

And I get a segmentation fault.  I then tried ldd and gdb and I get an instant
segmentation fault.  If I unset the LD_LIBRARY_PATH variable and then try ldd
and gdb, they work but the application fails because it's linking against older
libraries.

Perhaps it's because some libraries are not ABI compatible with your
old system. I'd suggest you trying to copy as few libraries as
possible to the old system rather than the whole stack of libraries
GTK+ depends on.
Any ideas would be greatly appreciated.



_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list



--
Best Regards

Shixin Zeng



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