Как написать кроссплатформенную программу?
Привет,
Я хочу написать небольшую кроссплатформенную утилиту с графическим интерфейсом. На каком языке /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:
- Они имеют обширные библиотеки для создания пользовательского интерфейса, в том числе компоненты компонентов пользовательского интерфейса.
- Среда выполнения Java обычно обновляется автоматически для пользователя.
Один недостаток:
- Версия Java, установленная на вашем компьютере конечного пользователя, может быть не полностью совместима с вашим приложением, что требует от вас кодирования с наименьшим вероятным знаменателем.
Попробуйте RealBasic. Visual Basic-подобный синтаксис, предназначается для Win32, OS X и Linux. Я не знаю никаких подробностей о нацеливании на Linux, но для любой кроссплатформенной разработки, которую я делал между Win32 и OS X, это была мечта.
Редактировать: генерирует собственные исполняемые файлы. Есть небольшая стоимость - 100 долларов.
Как насчет Python, использующего Qt или Wx, а затем использующего PythonToExe для создания "распространяемого"
Следует подумать о том, чтобы разработать разработку, чтобы гарантировать, что не используются собственные функции (т. Е. Реестр и т. Д.). Также такие вещи, как разрывы строк в текстовых файлах, будут иметь различные escape-символы, поэтому их необходимо обрабатывать.
Какие ОС вы имеете в виду, когда говорите о кроссплатформенности?
Как правильно указывает Epaga, нативные и кроссплатформенные являются взаимоисключающими. Вы можете написать несколько версий, которые изначально работают на нескольких платформах, или вам нужно использовать какую-то кроссплатформенную среду.
В случае кросс-платформенного подхода всегда требуются дополнительные установки. Например, многие здесь предлагают использовать Python и один из его фреймворков. Это потребует инструктирования людей для установки Python - и, возможно, фреймворка - в первую очередь.
Если вы нацелены на Windows и OS X (и готовы экспериментировать с альфа-релиз-кодом для Linux, если требуется поддержка этой ОС), я настоятельно рекомендую вам взглянуть на использование Adobe AIR для кросс-платформенных приложений с графическим интерфейсом.,
Если вы собираетесь взглянуть на Qt и WxWidgets, не забудьте также посмотреть GTK +!
Я согласен с Дэвидом Уизом и Джорджи,
Java - это кросс-платформенность. Ты буквально пишешь один раз и бегаешь везде. Не нужно компилировать ваш код для каждой целевой ОС или битности, не нужно беспокоиться о ссылках на что-либо и т. Д.
Единственное, как вы указали, является то, что JRE должен быть установлен, но это легко и быстро сделать даже для начинающих конечных пользователей (нужно несколько раз нажать "Далее>" в установщике).
А с Java Web Start развертывание становится еще проще: пользователь просто нажимает кнопку запуска на веб-странице, и приложение запускается (если надлежащая JVM установлена в соответствии с тем, что указано в дескрипторе JNLP), или пользователь перенаправляется на страницу загрузки Java (если подходящей JVM не найдено).
Если это "ДОЛЖНО" быть Desktop, используйте Qt. Ничто не сравнится прямо сейчас.
Однако лично я отказался от рабочего стола, и любой проект на основе пользовательского интерфейса, который я делаю, обычно основан на браузере / сервере. Вы можете легко написать небольшой пользовательский сервер, который прослушивает какой-либо порт, чтобы программа могла работать локально, без необходимости для ваших пользователей устанавливать Apache или иметь доступ к сети. У меня есть небольшая платформа Lua, Python и C++, которую я сделал для этой цели (хочу добавить Javascript для бэкэнда с V8:)