How to write a cross-platform program?

自闭症网瘾萝莉.ら 提交于 2020-01-20 19:15:09

问题


Greetings,

I want to write a small cross-platform utility program with GUI in it. What language/GUI-library should I stick to? Is it possible whatsoever?

This is gonna be a small program, so I don't want to make people download JVM or .NET Framework. Is it possible to develop it natively?

Update 1.

By "natively" I mean that the end result will be native code without intermediate layers like Java Virtual Machine or .NET Common Language Runtime

Update 2.

A FREE solution is preferable ;)


回答1:


If you know C or C++ the first cross platform GUI framework I can think of are:

  • QT (C++, proprietary but free with the LGPL licensing)
  • wxWidgets (C++, the most complete and stable but also huge)
  • FLTK (C++)
  • FOX (C++)
  • IUP (C, simpler and cleaner than the ones above)

If you know Pascal, you can try freepascal+Lazarus. I've never used it, though.




回答2:


The problem is: If you do not want to have a GUI but you do not want to ask the user to download an eternal API, Framework or virtual machine to run it in, be it TCL/TK, Java or QT etc. then you get lost pretty fast.

The reason is: You would have to rebuild all the (GUI) functionality those APIs, frameworks and virtual machines provide you with to be platform independent. And that's a whole lot of work to do... .

On the other side: The Java virtual machine is installed on nearly any operating system from scratch, why not give this one a shot?




回答3:


You want to develop a cross-platform program natively? Uh...I don't think that'll work, mainly because that phrase is a paradox. If you write native code, it by its very nature will only run on the platform you programmed it for. ;-) That's what the Frameworks are all about.

So what you should do instead is use a very slim framework if your program is going to be so small. itsmatt's idea of Qt is a possibility.




回答4:


WxWindows? Oh, it's called WxWidgets now: http://www.wxwidgets.org/




回答5:


wxWidgets has bindings to all sorts of languages - python for instance, if your app is small enough.




回答6:


Lazarus is great. GTK2 on Linux, win32/64 on Windows, WINCE on euh, Wince. It even uses Carbon on Mac (working on COCOA). Also easy to sell to your boss (the code is Delphi compatible)




回答7:


How about Python using Qt or Wx and then using PythonToExe to make a 'distributable'

Thought will have to giving to the development to ensure that no native functionality is used (i.e. registry etc.) Also things like line breaks in text files will have different escape characters so will need to be handled




回答8:


Which OS's do you have in mind when you say cross-platform?

As Epaga correctly points out, native and cross-platform are mutually exclusive. You can either write multiple versions that run natively on multiple platforms, or you need to use some cross-platform framework.

In the case of the cross-platform framework approach, there will always be extra installs required. For example, many here suggest using Python and one of its frameworks. This would necessitate instructing people to install python - and potentially the framework - first.

If you are aiming at Windows and OS X (and are prepared to experiment with alpha-release code for Linux if support for that OS is required), I'd highly recommend you take a look at using Adobe AIR for cross-platform GUI applications.




回答9:


I agree with Georgi, Java is the way to go. With a bit of work, you can make your desktop application work as a Java applet too (so that users do not need to actively download anything at all). See http://www.geogebra.org as an example of an application with runs smoothly as a cross-platform Java application AND has a simple port to a web applet.

Two other advantages to using Java are:

  1. They have extensive libraries for building the UI, including UI component builders.
  2. The Java runtime framework is generally updated automatically for the user.

One disadvantage:

  1. The version of Java installed on your end users computer may not be totally compatible with your application, requiring you to code to the lowest likely denominator.



回答10:


Try RealBasic. Visual Basic-like syntax, targets Win32, OS X and Linux. I don't know any details about targetting Linux, but for any cross-platform development I've done between Win32 and OS X its been a dream.

http://www.realbasic.com

Edit: Generates native executables. There is a small cost - $100.




回答11:


Have you looked at Qt?




回答12:


Flash? It's installed pretty much everywhere.




回答13:


If it "HAS" to be Desktop use Qt. Nothing beats it right now.

However personally I gave up on desktop and any UI based project I do is normally Browser/Server based. You can easily write a little custom server that listens to some port so the program can run locally with no need for your users to install Apache or have access to the net. I have a small Lua, Python and C++ framework I made for that purpose (Want to add Javascript for the backend with V8 :)




回答14:


If you're going to look at Qt and WxWidgets, don't forget to also check out GTK+ !




回答15:


I agree with David Wees and Georgi,

Java is cross-platformness par excellence. You literally write once and run everywhere. With no need of compiling your code for each target OS or bitness, no worries about linking against anything, etc.

Only thing is, as you pointed out, that a JRE must be installed, but it's quick and straightforward to do even for novice end-users (it's a matter of clicking "Next>" a few times in the installer).

And with Java Web Start deployment gets even easier: the user just clicks the launch button on a webpage and the application runs (if the proper JVM is installed according to what specified in the JNLP descriptor) or the user gets redirected to the Java download page (if no suitable JVM is found).



来源:https://stackoverflow.com/questions/138831/how-to-write-a-cross-platform-program

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!