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

Привет,

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

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

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

Под «изначально» я подразумеваю, что конечным результатом будет собственный код без промежуточных уровней, таких как виртуальная машина Java или среда выполнения общего языка .NET.

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
13
0
5 074
15

Ответы 15

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

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

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

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

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

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

  • QT (C++, проприетарный, но бесплатно с лицензией LGPL)
  • wxWidgets (C++, самый полный и стабильный, но тоже огромный)
  • ФЛТК (C++)
  • ЛИСА (C++)
  • IUP (C, проще и чище, чем указанные выше)

Если вы знаете Паскаль, вы можете попробовать Freepascal + Лазарь. Но я никогда им не пользовался.

Qt бесплатен только для проектов GPL. Проекты с другими некоммерческими лицензиями, в том числе с популярными лицензиями с открытым исходным кодом, такими как BSD или MIT / X11, требуют оплаты. FWIW, Qt - мой выбор благодаря его полноте и хорошо продуманному API.

skymt 26.09.2008 15:50

Qt теперь имеет (бесплатную) лицензию LGPL, поэтому приведенный выше комментарий skymt больше не является правильным.

KeyserSoze 02.05.2009 02:47

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

Без проблем. На самом деле, сейчас он выглядит действительно отполированным, возможно, придется когда-нибудь поиграть :)

JeeBee 26.09.2008 15:43

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

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

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

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

Вы можете статически связать Tk, wxWidgets, Qt, SDL и т. д.

Ben Voigt 29.03.2011 19:45

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

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

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

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

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

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

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

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

Я согласен с Георгием, 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 долларов.

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

Я согласен с Дэвидом Виесом и Георгием,

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

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

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

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