Как написать кроссплатформенную программу?

Привет,

Я хочу написать небольшую кроссплатформенную утилиту с графическим интерфейсом. На каком языке /GUI-библиотеке мне следует придерживаться? Возможно ли это вообще?

Это будет небольшая программа, поэтому я не хочу заставлять людей загружать JVM или.NET Framework. Можно ли развивать его изначально?

Обновление 1.

Под "изначально" я подразумеваю, что конечным результатом будет собственный код без промежуточных уровней, таких как Java Virtual Machine или.NET Common Language Runtime.

Обновление 2.

БЕСПЛАТНОЕ решение является предпочтительным;)

15 ответов

Если вы знаете C или C++, я могу подумать о первой кроссплатформенной структуре GUI:

  • QT (C++, проприетарный, но бесплатный с лицензией LGPL)
  • wxWidgets (C++, самый полный и стабильный, но также огромный)
  • FLTK (C++)
  • FOX (C++)
  • IUP (C, проще и чище, чем выше)

Если вы знаете Pascal, вы можете попробовать FreePascal+ Lazarus. Я никогда этим не пользовался.

Проблема в том, что: если вы не хотите иметь графический интерфейс, но не хотите просить пользователя загрузить вечный API, Framework или виртуальную машину для его запуска, будь то TCL/TK, Java или QT и т. Д., Тогда вы заблудиться довольно быстро.

Причина в том, что вам придется перестраивать все функции (GUI), которые эти API, платформы и виртуальные машины предоставляют вам, чтобы быть независимыми от платформы. И это много работы...

С другой стороны: виртуальная машина Java установлена ​​практически на любой операционной системе с нуля, почему бы не попробовать ее?

Вы хотите разработать кроссплатформенную программу изначально? Э-э... Я не думаю, что это сработает, главным образом потому, что эта фраза - парадокс. Если вы пишете собственный код, он по своей природе будет работать только на той платформе, для которой вы его запрограммировали.;-) В этом вся суть фреймворка.

Так что вместо этого вы должны использовать очень тонкий фреймворк, если ваша программа будет такой маленькой. Идея itmatt о Qt возможна.

У wxWidgets есть привязки ко всем видам языков - например, к Python, если ваше приложение достаточно маленькое.

Лазарь великолепен. GTK2 на Linux, win32/64 на Windows, WINCE на euh, Винс. Он даже использует Carbon на Mac (работает на COCOA). Также легко продать вашему боссу (код совместим с Delphi)

WxWindows? О, теперь он называется WxWidgets: http://www.wxwidgets.org/

Я согласен с Георгием, Java - это путь. Немного потрудившись, вы можете заставить ваше настольное приложение работать как Java-апплет (так что пользователям вообще не нужно ничего активно скачивать). См. http://www.geogebra.org/ как пример приложения, которое работает гладко как кроссплатформенное Java-приложение И имеет простой порт для веб-апплета.

Два других преимущества использования Java:

  1. Они имеют обширные библиотеки для создания пользовательского интерфейса, в том числе компоненты компонентов пользовательского интерфейса.
  2. Среда выполнения Java обычно обновляется автоматически для пользователя.

Один недостаток:

  1. Версия Java, установленная на вашем компьютере конечного пользователя, может быть не полностью совместима с вашим приложением, что требует от вас кодирования с наименьшим вероятным знаменателем.

Попробуйте RealBasic. Visual Basic-подобный синтаксис, предназначается для Win32, OS X и Linux. Я не знаю никаких подробностей о нацеливании на Linux, но для любой кроссплатформенной разработки, которую я делал между Win32 и OS X, это была мечта.

http://www.realbasic.com/

Редактировать: генерирует собственные исполняемые файлы. Есть небольшая стоимость - 100 долларов.

Как насчет Python, использующего Qt или Wx, а затем использующего PythonToExe для создания "распространяемого"

Следует подумать о том, чтобы разработать разработку, чтобы гарантировать, что не используются собственные функции (т. Е. Реестр и т. Д.). Также такие вещи, как разрывы строк в текстовых файлах, будут иметь различные escape-символы, поэтому их необходимо обрабатывать.

Какие ОС вы имеете в виду, когда говорите о кроссплатформенности?

Как правильно указывает Epaga, нативные и кроссплатформенные являются взаимоисключающими. Вы можете написать несколько версий, которые изначально работают на нескольких платформах, или вам нужно использовать какую-то кроссплатформенную среду.

В случае кросс-платформенного подхода всегда требуются дополнительные установки. Например, многие здесь предлагают использовать Python и один из его фреймворков. Это потребует инструктирования людей для установки Python - и, возможно, фреймворка - в первую очередь.

Если вы нацелены на Windows и OS X (и готовы экспериментировать с альфа-релиз-кодом для Linux, если требуется поддержка этой ОС), я настоятельно рекомендую вам взглянуть на использование Adobe AIR для кросс-платформенных приложений с графическим интерфейсом.,

Вы смотрели на Qt?

Вспышка? Он установлен практически везде.

Если вы собираетесь взглянуть на Qt и WxWidgets, не забудьте также посмотреть GTK +!

Я согласен с Дэвидом Уизом и Джорджи,

Java - это кросс-платформенность. Ты буквально пишешь один раз и бегаешь везде. Не нужно компилировать ваш код для каждой целевой ОС или битности, не нужно беспокоиться о ссылках на что-либо и т. Д.

Единственное, как вы указали, является то, что JRE должен быть установлен, но это легко и быстро сделать даже для начинающих конечных пользователей (нужно несколько раз нажать "Далее>" в установщике).

А с Java Web Start развертывание становится еще проще: пользователь просто нажимает кнопку запуска на веб-странице, и приложение запускается (если надлежащая JVM установлена ​​в соответствии с тем, что указано в дескрипторе JNLP), или пользователь перенаправляется на страницу загрузки Java (если подходящей JVM не найдено).

Если это "ДОЛЖНО" быть Desktop, используйте Qt. Ничто не сравнится прямо сейчас.

Однако лично я отказался от рабочего стола, и любой проект на основе пользовательского интерфейса, который я делаю, обычно основан на браузере / сервере. Вы можете легко написать небольшой пользовательский сервер, который прослушивает какой-либо порт, чтобы программа могла работать локально, без необходимости для ваших пользователей устанавливать Apache или иметь доступ к сети. У меня есть небольшая платформа Lua, Python и C++, которую я сделал для этой цели (хочу добавить Javascript для бэкэнда с V8:)

Другие вопросы по тегам