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

Привет,

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

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

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

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

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

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

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

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

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

Ответ 9

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

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

  • У них есть обширные библиотеки для создания пользовательского интерфейса, включая компоненты компонентов пользовательского интерфейса.
  • Рамка времени выполнения Java обычно обновляется автоматически для пользователя.

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

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

Ответ 10

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

http://www.realbasic.com

Изменить: создает собственные исполняемые файлы. Существует небольшая стоимость - 100 долларов.

Ответ 11

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

Ответ 12

Флэш? Он установлен почти везде.

Ответ 13

Если "HAS" используется для работы с рабочим столом Qt. Ничто не сравнится с этим прямо сейчас.

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

Ответ 14

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

Ответ 15

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

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

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

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