LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   Making cross-environnment applications (https://www.linuxquestions.org/questions/programming-9/making-cross-environnment-applications-703878/)

QueenZ 02-11-2009 08:29 AM

Making cross-environnment applications
 
*Linux Newbie Programmer here :)

I've been making applications for Windows and Mac and now it's time i start making apps for Linux. But here's the thing about Linux.. More than 1 Desktop Environment exist and so i'm wondering if the application that i will make will or will not work on all desktop environments (KDE, GNOME, Xfce etc.)

And what is the best tool to make applications for Linux? I've heard of KDevelop.. is it any good?

I'm using openSuSE 11 with KDE 4...

indienick 02-11-2009 08:32 AM

KDE is based on the Qt libraries; GNOME and Xfce are based on GTK+. As long as the GTK+ and/or Qt libraries exist on the system, you can use the application, whatever your desktop environment or window manager choice be.

QueenZ 02-11-2009 09:26 AM

Quote:

Originally Posted by indienick (Post 3439669)
KDE is based on the Qt libraries; GNOME and Xfce are based on GTK+. As long as the GTK+ and/or Qt libraries exist on the system, you can use the application, whatever your desktop environment or window manager choice be.

That sounds very smart :) Now, if some linux newbie will install Ubuntu with GNOME and he will want to run my program wich needs Qt libraries and he doesn't know how to install them, will his ubuntu automatically install Qt libraries necessery to run my application?

It's just that i'm making applications with Qt toolkit and there is this one linux newbie using Ubuntu with GNOME and he doesn't know more than duble-clicking my application to open it :D

theYinYeti 02-11-2009 10:16 AM

I can't say for Ubuntu, but in Mandriva at least, the minimal GTK and QT packages are almost always installed, for such cases, and sometimes even the minimal Gnome and KDE packages.

And anyone not using Ubuntu or Mandriva (known to be newbie-friendly) surely knows at least how to use the package-manager.
Speaking of that, you may want to explore LSB, which should ease cross-distribution working.

Yves.

indienick 02-11-2009 10:27 AM

Hah - unfortunately, no. You could have a "starter" script which will act as the launch point for your program: it would check to see if there is a Qt package installed - if not, install it using "apt-get" or "aptitude", then it would run your program.

Checking if Qt is installed would be a one-liner, something easy like grepping a DPKG list, or something...sorry I cannot be more specific on how to do a non-interactive command-line test for Qt's existence on a Debian-based system.

Quote:

Originally Posted by theYinYeti
Speaking of that, you may want to explore LSB, which should ease cross-distribution working.

It would, supplying the distribution is LSB-compliant. As far as I know, it's Red Hat, Fedora, Debian and OpenSuSE. Mandriva too, I think. Slackware, for instance, is not LSB-compliant.

H_TeXMeX_H 02-11-2009 11:07 AM

Now, of course besides the mainstream GTK and QT, there are many other graphical toolkits / widgets out there: wxWidgets, fltk, etc. Search here for more:
http://freshmeat.net/browse/851/
http://freshmeat.net/browse/810/

Also keep in mind that there exist a (substantial) group of users who dislike GUIs (including me), so don't feel like you have to use these to make simple programs that do menial tasks. I know that's probably how it works in Window$.

paulsm4 02-11-2009 11:14 AM

H_TeXMeX_H -

You wouldn't happen to know of any eye-candy-ish C/C++ GUI toolkits for DOS (that's right: MS-DOS, or ROM-DOS), would you?

TIA .. PSM

PS:
Quote:

GUIs make simple tasks easier...
... and difficult tasks utterly impossible

ErV 02-11-2009 11:24 AM

Quote:

Originally Posted by QueenZ (Post 3439665)
And what is the best tool to make applications for Linux? I've heard of KDevelop.. is it any good?

Any text editor + compiler + build tool.
For text editor you can use vim, jedit, emacs, etc. - they should be available on all 3 platforms.
For build tool you can use "gnu make", "gnu build tools"("autotools"), scons (www.scons.org), or qmake (part of Qt package, only for Qt-based applications). I'd recommend to use scons or qmake. There will be a problem with autotools on windows (you'll need MSys (www.mingw.org) or cygwin to build applications that use them), and although hand-written makefiles are quite portable, they might not be flexible enough for large projects.

There are probably other build systems, like "Jam" but I never used them.

If you really want IDE available on all platforms, then there should be eclipse, netbeans (haven't used it), anjuta and codeblocks. List of all ides is available on en.wikipedia.org.

QueenZ 02-11-2009 12:38 PM

Another Question

So how does Firefox (for example) get it to be cross-environment? I mean it runs on GNOME and KDE and i have never installed GTK+ or Qt... how can i make something like that??

indienick 02-11-2009 01:09 PM

GTK+ and Qt are probably already installed on your system given OpenSuSE usually installs both libraries anyways.

Also, Firefox is built in something called XULRunner.

As a side thought, I think it would be cool if there was a library out there that let you build a graphical application using generic classes or types, and then upon compiling, the user/administrator would decide whether they want to build it using Qt or GTK+ (or both with added -qt and -gtk suffixes?). Maybe something like this already exists...? It would cut down on a lot of re-writing and provide a nice layer/library for beginning programmers to use, in Linux, BSD and UNIX.

paulsm4 02-11-2009 02:01 PM

Indienick - I don't think Firefox is "built in XULRunner". Here's the link:

https://developer.mozilla.org/en/XULRunner

QueenZ - here's an example Firefox. It's running on Suse 9.3 (an admittedly old Firefox, running on an admittedly old version of Suse). As you can see from the "ldd" output (you can run the Linux command "ldd" on any executable to see what shared libraries it needs), this Firefox needs GTK runtime (and a ton of other stuff!) to work:
Quote:

cd /opt/MozillaFirefox/lib
ldd firefox-bin

linux-gate.so.1 => (0xffffe000)
libmozjs.so => /opt/MozillaFirefox/lib/libmozjs.so (0x40019000)
libxpcom.so => /opt/MozillaFirefox/lib/libxpcom.so (0x400a1000)
libxpcom_core.so => /opt/MozillaFirefox/lib/libxpcom_core.so (0x400a4000)
libplds4.so => /opt/MozillaFirefox/lib/libplds4.so (0x4014f000)
libplc4.so => /opt/MozillaFirefox/lib/libplc4.so (0x40152000)
libnspr4.so => /opt/MozillaFirefox/lib/libnspr4.so (0x40156000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x4019d000)
libdl.so.2 => /lib/libdl.so.2 (0x401af000)
libgtk-x11-2.0.so.0 => /opt/gnome/lib/libgtk-x11-2.0.so.0 (0x401b3000)
libgdk-x11-2.0.so.0 => /opt/gnome/lib/libgdk-x11-2.0.so.0 (0x4047b000)
libatk-1.0.so.0 => /opt/gnome/lib/libatk-1.0.so.0 (0x404f6000)
libgdk_pixbuf-2.0.so.0 => /opt/gnome/lib/libgdk_pixbuf-2.0.so.0 (0x4050f
000)
libpangoxft-1.0.so.0 => /opt/gnome/lib/libpangoxft-1.0.so.0 (0x40524000)
libpangox-1.0.so.0 => /opt/gnome/lib/libpangox-1.0.so.0 (0x4052b000)
libpango-1.0.so.0 => /opt/gnome/lib/libpango-1.0.so.0 (0x40536000)
libgobject-2.0.so.0 => /opt/gnome/lib/libgobject-2.0.so.0 (0x4056e000)
libgmodule-2.0.so.0 => /opt/gnome/lib/libgmodule-2.0.so.0 (0x405a2000)
libglib-2.0.so.0 => /opt/gnome/lib/libglib-2.0.so.0 (0x405a6000)
libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x40627000)
libm.so.6 => /lib/tls/libm.so.6 (0x40723000)
libpng.so.3 => /usr/lib/libpng.so.3 (0x40746000)
libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x40774000)
libsmime3.so => /opt/MozillaFirefox/lib/libsmime3.so (0x40793000)
libssl3.so => /opt/MozillaFirefox/lib/libssl3.so (0x407b1000)
libnss3.so => /opt/MozillaFirefox/lib/libnss3.so (0x407cf000)
libsoftokn3.so => /opt/MozillaFirefox/lib/libsoftokn3.so (0x4082a000)
libXrender.so.1 => /usr/X11R6/lib/libXrender.so.1 (0x40887000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x4088f000)
libXt.so.6 => /usr/X11R6/lib/libXt.so.6 (0x408fe000)
libxpcom_compat.so => /opt/MozillaFirefox/lib/libxpcom_compat.so (0x40951000)
libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x4096b000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x40a29000)
libc.so.6 => /lib/tls/libc.so.6 (0x40a31000)
libXft.so.2 => /usr/X11R6/lib/libXft.so.2 (0x40b4a000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x40b5d000)
libpangoft2-1.0.so.0 => /opt/gnome/lib/libpangoft2-1.0.so.0 (0x40b8b000)
/lib/ld-linux.so.2 (0x40000000)
libXrandr.so.2 => /usr/X11R6/lib/libXrandr.so.2 (0x40bb2000)
libXi.so.6 => /usr/X11R6/lib/libXi.so.6 (0x40bb6000)
libXinerama.so.1 => /usr/X11R6/lib/libXinerama.so.1 (0x40bbe000)
libXfixes.so.3 => /usr/X11R6/lib/libXfixes.so.3 (0x40bc1000)
libXcursor.so.1 => /usr/X11R6/lib/libXcursor.so.1 (0x40bc6000)
libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x40bd0000)
libz.so.1 => /lib/libz.so.1 (0x40bde000)
libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x40bef000)
libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x40bf7000)
libexpat.so.0 => /usr/lib/libexpat.so.0 (0x40c10000)

H_TeXMeX_H 02-11-2009 02:16 PM

Quote:

Originally Posted by paulsm4 (Post 3439847)
You wouldn't happen to know of any eye-candy-ish C/C++ GUI toolkits for DOS (that's right: MS-DOS, or ROM-DOS), would you?

Are you serious ? Well try some of these:
http://members.chello.at/theodor.lauppert/dos/gui.htm

Back to the OP, I forgot to mention an IDE to use. Well, you can use any, but I'd recommend at least that it have syntax highlighting. I use geany, but there are plenty more to choose from:
http://freshmeat.net/browse/65/

ErV 02-11-2009 03:47 PM

Quote:

Originally Posted by QueenZ (Post 3439957)
Another Question

So how does Firefox (for example) get it to be cross-environment? I mean it runs on GNOME and KDE and i have never installed GTK+ or Qt... how can i make something like that??

DOn't confuse ideas. Being able to compile software on multiple platforms is not the same thing as being able to install it without additional dependencies.
Firefox needs GTK and you have it installed. If you want to distribute application without too many external dependencies, either use static linking, or include dependencies into installer, or use only commonly used libraries (probably the hardest way).

QueenZ 02-12-2009 01:42 AM

OK, so does it mean that if i don't have GTK+ libraries installed then i can't install Firefox??

ErV 02-12-2009 04:34 AM

Quote:

Originally Posted by QueenZ (Post 3440624)
OK, so does it mean that if i don't have GTK+ libraries installed then i can't install Firefox??

You can install it. But it won't work without GTK libraries. GTK libraries are very common, and it is very unlikely that you don't have them.

QueenZ 02-13-2009 01:38 AM

But why does it need GTK libraries instead of Qt libraries???

theYinYeti 02-13-2009 02:53 AM

?? Do you know programing? Gtk has its own API, Qt has its own API, and they are different…
Or did I not understand the question?

QueenZ 02-13-2009 03:27 AM

Then is Firefox made on GTK+? And why isn't it made on Qt?

and if i make a Qt application then i need to install Qt libraries on ubuntu to run my qt application?

theYinYeti 02-13-2009 04:04 AM

Exactly yes. As for why… Why is Colin McRae Rally done on win32 and directX instead of glibc and SDL? Who knows… Each developer/company has their preferences.

Yves.

QueenZ 02-13-2009 05:11 AM

OK, so you guys said that most distros have gtk+ libraries already installed with them? Right? Do most distros also have Qt libraries installed with them? Is GTK+ more popular than Qt? (That's 3 questions..) :)

ErV 02-13-2009 05:21 AM

Quote:

Originally Posted by QueenZ (Post 3441990)
Then is Firefox made on GTK+? And why isn't it made on Qt?

Ask firefox developers.

Quote:

Originally Posted by QueenZ (Post 3441990)
and if i make a Qt application then i need to install Qt libraries on ubuntu to run my qt application?

Only if application isn't statically linked with Qt.

Quote:

Originally Posted by QueenZ (Post 3442079)
OK, so you guys said that most distros have gtk+ libraries already installed with them? Right? Do most distros also have Qt libraries installed with them? Is GTK+ more popular than Qt? (That's 3 questions..) :)

Yes, most distros have distributions have gtk.
There is two version of Qt - Qt 3 and Qt 4. Qt 3 is installed if distribution uses KDE 3 or if there are packages that require it, Qt 4 is installed if distribution uses Kde 4, or if there are applications that require it. Normally distributions has both libraries installed.

Anyway, I wouldn't rely on popularity to pick GUI toolkit. Qt 4 is best known (to me) gui toolkit for C++. Gtk is suitable for C programming. Use library you most comfortable with.

Stop worrying about dependencies.
Your distribution have automatic dependency checking - i.e. if you make *.deb that specifies that your software requires Qt 4, package manager will download and install Qt 4 if necessary. Use whatever library you want, just specify dependencies in README or INSTALL document (for people that build from source), and within your *.deb package, and you will be fine.

H_TeXMeX_H 02-13-2009 07:35 AM

Quote:

Originally Posted by ErV (Post 3442088)
Normally distributions has both libraries installed.

Stop worrying about dependencies.
Your distribution have automatic dependency checking - i.e. if you make *.deb that specifies that your software requires Qt 4, package manager will download and install Qt 4 if necessary. Use whatever library you want, just specify dependencies in README or INSTALL document (for people that build from source), and within your *.deb package, and you will be fine.

Finally, I get a chance to say: You're wrong.

You should worry about dependencies especially with qt, because as ErV says there is qt3 and qt4. Many distributions have only one installed, and although there exist packages for the other consider the fact that a full install of qt4 is about 900 MB in size. Please do take into account these factors, because it will dictate your user base. Personally I will not install qt4 just to run 1 program, nor will I install qt3 if most programs have already been ported to qt4. IMO, qt is not the best option, unless you want to make KDE-specific programs.

I would use GTK+ because it doesn't have any correlation with a window manager (unlike KDE-QT). I can say that 99 % of desktop Linux users have GTK+ installed. You can't get around it because so many programs depend on GTK+. If you want to program in C++, then use gtkmm, most people will have that installed as well.

Note: I am biased against KDE and QT, they are bloated s***, IMO.

ErV 02-13-2009 08:38 AM

Quote:

Originally Posted by H_TeXMeX_H (Post 3442227)
Finally, I get a chance to say: You're wrong.

I'm not.
Unless newbie will go berzerk and gather few hundreds of external dependencies (which is unlikely), it isn't important. The more important thing is to pick reasonable gui toolkit which won't drive you nuts later.

Quote:

Originally Posted by H_TeXMeX_H (Post 3442227)
You should worry about dependencies especially with qt, because as ErV says there is qt3 and qt4. Many distributions have only one installed, and although there exist packages for the other consider the fact that a full install of qt4 is about 900 MB in size.

900 megabytes is installation size for developer, not end user.
By removing documents, examples, demos and debug versions of libraries, installation size can be easily reduced to 79 megabytes (and probably even further - by killing Qt assistant, designer, stripping all binaries and so on). This is uncompressed size, in *.tar.bz2 it will be 23 megabytes. This is the size it will take for user package. Another thing is that Qt application can be deployed with all required Qt 4 libraries (on Windows platform, for example), and basic app will need only three or four of them. Or you could use static linking, as Opera did. See installation size of opera static package on linux, for example - no installation of Qt is required to run opera.
Also Qt 3 and Qt 4 don't conflict.

Quote:

Originally Posted by H_TeXMeX_H (Post 3442227)
Please do take into account these factors, because it will dictate your user base. Personally I will not install qt4 just to run 1 program, nor will I install qt3 if most programs have already been ported to qt4. IMO, qt is not the best option, unless you want to make KDE-specific programs.

It is best option for developer. Most sane GUI development toolkit I know.
It is more flexible, and it allows to create nicer-looking applications (which is important in certain situation). Take a look at qtdemo (included in full installation - example of all available technologies), for example. I never seen anything even close to that being developed in GTK. Qt 4 doesn't limit what you can do. You can make any widget you can think of. And it is fast, and has opengl support.

Quote:

Originally Posted by H_TeXMeX_H (Post 3442227)
I would use GTK+ because it doesn't have any correlation with a window manager (unlike KDE-QT).

Have you ever wrote program for Qt 4?
Qt 4 doesn't have correlation with window manager. To develop KDE application you use another set of libraries. Qt != KDE, as GTK != Gnome. You can make purely KDE or purely Gnome application, and it will be hell to build on some systems (example: GnuCash on slackware), but they won't be purely Qt or purely GTK applications. Besides, upgrading GTK+ is much more "fun" than upgrading Qt. GTK has 3 or 4 external dependencies that has to be built in certain order (pango, cairo and something else). Qt 4 has no such dependencies. Besides certain gtk plugins make life even funnier (gdkpixelbuf, I think?). I wouldn't use GTK unless i have to develop GUI using pure C only.

No offfence, but it doesn't look to me like you have much experience in Qt 4 programming. So I'd recommend to keep aside.

H_TeXMeX_H 02-13-2009 10:14 AM

I know QT != KDE, but all KDE apps use qt. GNOME uses GTK but also a ton of other dependencies.

You're right I have never used qt4, but then I never made any quality-based comment on it.

ErV 02-13-2009 01:14 PM

Quote:

Originally Posted by H_TeXMeX_H (Post 3442418)
but then I never made any quality-based comment on it.

If you have 900 megabyte installation of Qt 4, then you have qtdemo application (located in /usr/local/Trolltech/Qt-4.*/bin/ folder). Launch it, scroll through menu, check examples, and it will be obvious which toolkit is more powerful. With all due respect to other toolkits, I haven't see anything like it implemented with another toolkit (non-Qt).
From programmer's point of view - even if they have made custom preprocessor, their signal/slot model makes a lot of sense, and whole library is pretty clean/easy to use.

The only problem with Qt 4 is its' license - you can't create closed-source application with it for free (but I heard something about Nokia changing licensing term to LGPL in future, so this problem might soon disappear), only GPL-licensed software. Several other toolkits have less restrictive licenses (wxWidgets, fox toolkit), but they don't even stand close to Qt in terms of quality.

H_TeXMeX_H 02-13-2009 02:22 PM

Quote:

Originally Posted by ErV (Post 3442596)
If you have 900 megabyte installation of Qt 4, then you have qtdemo application (located in /usr/local/Trolltech/Qt-4.*/bin/ folder). Launch it, scroll through menu, check examples, and it will be obvious which toolkit is more powerful. With all due respect to other toolkits, I haven't see anything like it implemented with another toolkit (non-Qt).
From programmer's point of view - even if they have made custom preprocessor, their signal/slot model makes a lot of sense, and whole library is pretty clean/easy to use.

Thanks, didn't even see it till now. Indeed, I haven't seen anything like this either from a GUI toolkit. I'm just wondering when would this normally be used ? Now I know why hedgewars uses it ... they made a game with it.


All times are GMT -5. The time now is 11:26 PM.