Linking With Gtk And Running On Any Linux
I spent time understanding how to compile a wx application for binary delivery on any linux distrib. I did not solve all problems, but this is a start. Please consider that I compiled wxwidgets with gtk2 statically monolithic (--disable-shared --enable-monolithic)
- Remember that GTK is licensed under LGPL, which essentially means that in order to link it to your application _statically_, your application will have to be (L)GPL-licensed.
- You should note that in most cases (if not all cases), GTK is linked dynamically. Using the --disable-shared option of configure with wxGTK links wxGTK into your program statically, but not GTK+ itself, which will usually still be linked dynamically. --Tierra 09:28, 7 August 2007 (PDT)
Basic Steps
Using the command line prompt in root mode, do:
wxWidgets 2.9.2
- wget -r -nd http://tenet.dl.sourceforge.net/project/wxwindows/2.9.2/wxWidgets-2.9.2.tar.bz2
- tar -xjvf wxWidgets-2.9.2.tar.bz2
- cd wxWidgets-2.9.2
- mkdir build-GTK
- cd build-GTK
- apt-get install libgtk2.0-dev
- ../configure --with-gtk --enable-debug
- make
- make install
- ldconfig
wxGTK 2.8.12
- wget -r -nd http://ufpr.dl.sourceforge.net/project/wxwindows/2.8.12/wxGTK-2.8.12.tar.gz
- tar -xzvf wxGTK-2.8.12.tar.gz
- cd wxGTK-2.8.12
- mkdir build-GTK
- cd build-GTK
- ../configure --with-gtk --enable-debug
- make
- make install
- ldconfig
NB.
If you want wxMediaCtrl (mediaplayer), you'll probably change the script to:
- apt-get install libgconf2-dev
- apt-get install libgstreamer0.10-dev
- apt-get install libgstreamer-plugins-base0.10-dev
- ../configure --with-gtk --enable-debug --enable-mediactrl
You can install in a specific directory with:
- --prefix=/path/to/INSTALL_XYZ
If you get a gtk+-2.0.pc error this can be found in:
- apt-get install libgtk2.0-dev
Good luck - Steve Cookson
Some Information
I've added to my configure command the following options : --with-gtk --with-libpng=builtin --with-zlib=builtin --with-libjpeg=builtin --with-regex=builtin --with-expat=builtin
without these "builtin", the sample apps claims for libpng.so.2 while libpng.so is present, and the radiobox/buttons/notebook etc. did not appear correctly.
- I had to update my binutils package in order to link the opengl sample.
- Do not try to link purely static with all libs. First they are not fully compatible at run time, second you will have a BIG problem finding the order of all -l* in the link command.
- Look at tldp.org some info about linking on linux.
- The command "nm -Bog /usr/lib/*" will give you all functions declared in all libraries (use grep to select).
- The command "ldd myapplication" will give your all shared libraries needed by this program.
Riccardo Cohen. PS: Please feel free to add anything to improve this topic.
Solution 1
by Milan Kupcevic
If you do not need OpenGL, use wxGTK2-static-devel rpm from http://timeit.sourceforge.net/, compile your super-application on virgin RedHat 8.0 (i386) for i386 binary (it will run on x86_64 too) and on virgin Yellow Dog 3.0 for ppc binary; your binaries will work on virtually all i386, x86_64, and ppc linux distros in use today.
It was reported that these binaries run on:
- i386 distros:
- Red Hat Linux 8
- Red Hat Linux 9
- Red Hat Enterprise Linux 3
- Fedora Core 1
- Fedora Core 2
- Mandrake Linux 9
- Mandrake Linux 10
- Suse 8.1
- Suse 9
- Sun JDS 2003 Linux
- Sun JDS 2 Linux
- Ubuntu Linux 4
- Ubuntu Linux 5
- ppc distros:
- Yellow Dog 3
- Yellow Dog 4
- Mandrake Linux 9.1
- Ubuntu Linux 4
- Ubuntu Linux 5
Feel free to add your distribution if binaries compiled this way work on it.